aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sockutils.c6
-rw-r--r--sockutils.h2
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 */
+
/*
* \}
*/