recv(MSG_PEEK)超时

时间:2014-10-08 08:56:47

标签: c++ c linux sockets

我有一个套接字,我为recv()设置了超时。 recv()有两个步骤,首先,如果使用MSG_PEEK | MSG_DONTWAIT完成,我会检查已接收数据的内容。

recvTimeout.tv_sec = mRecvTimeoutSecs;
recvTimeout.tv_usec = mRecvTimeoutUSecs; 
sendTimeout.tv_sec = mSendTimeoutSecs;
sendTimeout.tv_usec = mSendTimeoutUSecs;

result = enableSocketOption(SOL_SOCKET, SO_RCVTIMEO, &recvTimeout, sizeof(recvTimeout));

peekdLen = ::recv(mSocket, peekDataBuffer, MAX_RECV_LENGTH, MSG_PEEK | MSG_DONTWAIT);

如果我使用recv(),我只是想MSG_PEEK | MSG_DONTWAIT是否会超时。

1 个答案:

答案 0 :(得分:1)

不,套接字不会超时,因为MSG_DONTWAIT会导致recv()立即返回。请注意,如果设置为1毫秒超时,则可能会超时 - 这取决于实现(运行代码的操作系统)。