diff options
-rw-r--r-- | sockutils.c | 6 | ||||
-rw-r--r-- | sockutils.h | 2 |
2 files changed, 7 insertions, 1 deletions
diff --git a/sockutils.c b/sockutils.c index 4bb97a71..7ed7d298 100644 --- a/sockutils.c +++ b/sockutils.c @@ -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) { diff --git a/sockutils.h b/sockutils.h index d3299eaf..3102fcef 100644 --- a/sockutils.h +++ b/sockutils.h @@ -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 */ + /* * \} */ |