- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
// GetBlockingMode возвращает: 1 - nonblocking | 0 - blocking | -1 - error | -2 - timeout reseted!
int GetBlockingMode(int Sock)
{
int iSize, iValOld, iValNew, retgso;
iSize = sizeof(iValOld);
retgso = getsockopt(Sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&iValOld, &iSize); // Save current timeout value
if (retgso == SOCKET_ERROR) return (-1);
iValNew = 1;
retgso = setsockopt(Sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&iValNew, iSize); // Set new timeout to 1 ms
if (retgso == SOCKET_ERROR) return (-1);
// Ok! Try read 0 bytes.
char buf[1]; // 1 - why not :)
int retrcv = recv(Sock, buf, 0, MSG_OOB); // try read MSG_OOB
int werr = WSAGetLastError();
retgso = setsockopt(Sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&iValOld, iSize); // Set timeout to initial value
if (retgso == SOCKET_ERROR) return (-2);
if (werr == WSAENOTCONN) return (-1);
if (werr == WSAEWOULDBLOCK) return 1;
return 0;
}
d_fomenok 17.08.2017 10:18 # +1
# iSize = sizeof(iValOld);
Antervis 17.08.2017 16:44 # 0
cykablyad 17.08.2017 16:45 # 0
Мопед не мой
inkanus-gray 17.08.2017 16:47 # +1
А разве есть варианты?
d_fomenok 20.08.2017 13:41 # 0
inkanus-gray 20.08.2017 19:57 # +2
d_fomenok 21.08.2017 14:38 # 0
inkanus-gray 21.08.2017 14:59 # +2
Остаётся взять исходники Winsockets из WINE или из ReactOS и допилить...
roman-kashitsyn 17.08.2017 17:07 # +2
Отличная идея, надо тоже носки пронумеровать.
bormand 17.08.2017 18:28 # +4
Имхо, множество носков достаточно разбить на классы эквивалентности.
inkanus-gray 17.08.2017 19:14 # +1