]> The Tcpdump Group git mirrors - libpcap/blobdiff - sockutils.c
Merge branch 'master' of https://github.com/rixed/libpcap into rixed-master
[libpcap] / sockutils.c
index 8474552712c02b36e9b49c785cc2903e808ac6ed..25844c6cd53d9dee0998b2c34f53bd03e8ffbd3e 100644 (file)
@@ -844,6 +844,7 @@ int sock_bufferize(const char *buffer, int size, char *tempbuf, int *offset, int
 int sock_recv(SOCKET sock, SSL *ssl, void *buffer, size_t size, int flags,
     char *errbuf, int errbuflen)
 {
+       int recv_flags = 0;
        char *bufp = buffer;
        int remaining;
        ssize_t nread;
@@ -864,6 +865,9 @@ int sock_recv(SOCKET sock, SSL *ssl, void *buffer, size_t size, int flags,
                return -1;
        }
 
+       if (flags & SOCK_MSG_PEEK)
+               recv_flags |= MSG_PEEK;
+
        bufp = (char *) buffer;
        remaining = (int) size;
 
@@ -875,14 +879,17 @@ int sock_recv(SOCKET sock, SSL *ssl, void *buffer, size_t size, int flags,
 #ifdef HAVE_OPENSSL
                if (ssl)
                {
+                       /*
+                        * XXX - what about MSG_PEEK?
+                        */
                        nread = ssl_recv(ssl, bufp, remaining, errbuf, errbuflen);
                        if (nread == -2) return -1;
                }
                else
+                       nread = recv(sock, bufp, remaining, recv_flags);
 #else
-               (void)ssl;
+               nread = recv(sock, bufp, remaining, recv_flags);
 #endif
-               nread = recv(sock, bufp, remaining, 0);
 
                if (nread == -1)
                {
@@ -978,7 +985,7 @@ int sock_recv_dgram(SOCKET sock, SSL *ssl, void *buffer, size_t size,
         * don't need to loop.
         */
 #ifdef _WIN32
-       nread = recv(sock, buffer, size, 0);
+       nread = recv(sock, buffer, (int)size, 0);
        if (nread == SOCKET_ERROR)
        {
                /*
@@ -1408,7 +1415,7 @@ int sock_getascii_addrport(const struct sockaddr_storage *sockaddr, char *addres
                        (memcmp(&((struct sockaddr_in6 *) sockaddr)->sin6_addr, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", sizeof(struct in6_addr)) == 0))
                {
                        if (address)
-                               strlcpy(address, SOCKET_NAME_NULL_DAD, addrlen);
+                               pcap_strlcpy(address, SOCKET_NAME_NULL_DAD, addrlen);
                        return retval;
                }
        }
@@ -1424,13 +1431,13 @@ int sock_getascii_addrport(const struct sockaddr_storage *sockaddr, char *addres
 
                if (address)
                {
-                       strlcpy(address, SOCKET_NO_NAME_AVAILABLE, addrlen);
+                       pcap_strlcpy(address, SOCKET_NO_NAME_AVAILABLE, addrlen);
                        address[addrlen - 1] = 0;
                }
 
                if (port)
                {
-                       strlcpy(port, SOCKET_NO_PORT_AVAILABLE, portlen);
+                       pcap_strlcpy(port, SOCKET_NO_PORT_AVAILABLE, portlen);
                        port[portlen - 1] = 0;
                }