- 论坛徽章:
- 1
|
请问linux下几个关于tcp的recv接收函数的问题
1,recv( MSG_PEEK ); (不过建议你采用“一次读一个字节的方法”)。
2,getsockopt( SO_RCVBUF );
注:参考 man。
附:我自己写的 ReadUntil
- int JServiceThread::ReadUntil( SOCKET sock, char *buffer, int size, char *flag, int seconds )
- {
- int readBytes = 0;
- int ret, flagSize;
- flagSize = (int)strlen(flag);
- ret = WaitForRead( sock, seconds );
- if ( ret == SOCKET_ERROR )
- return SOCKET_ERROR;
- ret = recv( sock, buffer, flagSize, 0 );
- if ( ret != flagSize )
- return SOCKET_ERROR;
- readBytes += ret;
- if ( memcmp( buffer, flag, flagSize ) == 0 )
- {
- memset( buffer, 0x00, flagSize );
- return 0; // 接收到哨兵
- }
- while( readBytes < size )
- {
- ret = WaitForRead( sock, seconds );
- if ( ret == SOCKET_ERROR )
- break;
- ret = recv( sock, buffer + readBytes, 1, 0 );
- if ( ret == SOCKET_ERROR )
- break;
- else
- readBytes ++;
- if ( memcmp( buffer+readBytes-flagSize, flag, flagSize ) == 0 ) // 接收到哨兵
- {
- memset( buffer+readBytes-flagSize, 0x00, flagSize );
- readBytes -= flagSize;
- break;
- }
- }
- return readBytes;
- }
复制代码 |
|