]> The Tcpdump Group git mirrors - libpcap/commitdiff
Add a flag to allow peeking at messages in sock_recv().
authorGuy Harris <[email protected]>
Fri, 19 Oct 2018 17:27:04 +0000 (10:27 -0700)
committerGuy Harris <[email protected]>
Fri, 19 Oct 2018 17:27:04 +0000 (10:27 -0700)
It works like MSG_PEEK (because it causes MSG_PEEK to be set in the
recv() flags).

sockutils.c
sockutils.h

index 4bb97a71216a4c536afc9d74336c3721f1d4fcdc..7ed7d2984a4a69df1af801c74a038d21bdd77216 100644 (file)
@@ -838,6 +838,7 @@ int sock_bufferize(const char *buffer, int size, char *tempbuf, int *offset, int
 int sock_recv(SOCKET sock, void *buffer, size_t size, int flags,
     char *errbuf, int errbuflen)
 {
+       int recv_flags = 0;
        char *bufp = buffer;
        int remaining;
        ssize_t nread;
@@ -858,6 +859,9 @@ int sock_recv(SOCKET sock, void *buffer, size_t size, int flags,
                return -1;
        }
 
+       if (flags & SOCK_MSG_PEEK)
+               recv_flags |= MSG_PEEK;
+
        bufp = (char *) buffer;
        remaining = (int) size;
 
@@ -866,7 +870,7 @@ int sock_recv(SOCKET sock, void *buffer, size_t size, int flags,
         * Win32.
         */
        for (;;) {
-               nread = recv(sock, bufp, remaining, 0);
+               nread = recv(sock, bufp, remaining, recv_flags);
 
                if (nread == -1)
                {
index d3299eaf22acddcee468ec525b4d74f438654db0..3102fcef988b4663efee6b54c1a69b153da3cbed 100644 (file)
@@ -182,6 +182,8 @@ int WSAAPI getnameinfo(const struct sockaddr*,socklen_t,char*,DWORD,
 #define SOCK_EOF_ISNT_ERROR    0x00000000      /* Return 0 on EOF */
 #define SOCK_EOF_IS_ERROR      0x00000002      /* Return an error on EOF */
 
+#define SOCK_MSG_PEEK          0x00000004      /* Return data but leave it in the socket queue */
+
 /*
  * \}
  */