It works like MSG_PEEK (because it causes MSG_PEEK to be set in the
recv() flags).
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;
return -1;
}
+ if (flags & SOCK_MSG_PEEK)
+ recv_flags |= MSG_PEEK;
+
bufp = (char *) buffer;
remaining = (int) size;
* Win32.
*/
for (;;) {
- nread = recv(sock, bufp, remaining, 0);
+ nread = recv(sock, bufp, remaining, recv_flags);
if (nread == -1)
{
#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 */
+
/*
* \}
*/