socket setsockopt
来源:互联网 发布:淘宝商城女士包包 编辑:程序博客网 时间:2024/05/31 13:16
#include <winsock.h>
int PASCAL FAR setsockopt(SOCKET s, int level, int optname, const char FAR *optval, int optlen);
参数1:s:标识一个套接字的描述符;
参数2:level:选项定义的层次;
目前仅支持SOL_SOCKET和IPPROTO_TCP层次;
参数3:optname:需设置的选项;
参数4:optval:指针,指向存放选项值的缓冲区;
参数5:optlen:optval缓冲区长度;
setsockopt设置Socket超时操作:
在send(),recv()过程中有时由于网络状况等原因,发收不能预期进行,而设置收发时限:
struct timeval timeout = {3,0}; //设置3秒超时
struct timeval
{
__time_t tv_sec; /* Seconds. 秒*/
__suseconds_t tv_usec; /* Microseconds.微妙 */
};
//设置发送超时
setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&timeout,sizeof(struct timeval));
struct timeval
{
__time_t tv_sec; /* Seconds. 秒*/
__suseconds_t tv_usec; /* Microseconds.微妙 */
};
//设置发送超时
setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&timeout,sizeof(struct timeval));
//设置接收超时
setsockopt(socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&timeout,sizeof(struct timeval));
setsockopt(socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&timeout,sizeof(struct timeval));
返回值:
若无错误发生,setsockopt ()返回0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。
错误代码:
WSANOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。
WSAENETDOWN:WINDOWS套接口实现检测到网络子系统失效。
WSAEFAULT:optval不是进程地址空间中的一个有效部分。
WSAEINPROGRESS:一个阻塞的WINDOWS套接口调用正在运行中。
WSAEINVAL:level值非法,或optval中的信息非法。
WSAENETRESET:当SO_KEEPALIVE设置后连接超时。
WSAENOPROTOOPT:未知或不支持选项。其中,SOCK_STREAM类型的套接口不支持SO_BROADCAST选项,SOCK_DGRAM 类型的套接口不支持SO_DONTLINGER 、SO_KEEPALIVE、SO_LINGER和SO_OOBINLINE选项。
WSAENOTCONN:当设置SO_KEEPALIVE后连接被复位。
WSAENOTSOCK:描述字不是一个套接口。
0 0
- socket setsockopt
- setsockopt 设置socket
- setsockopt配置socket选项
- setsockopt 设置socket (转贴)
- setsockopt 设置socket
- setsockopt 设置socket
- setsockopt 设置socket
- setsockopt 设置socket
- setsockopt 设置socket
- setsockopt 设置socket
- setsockopt 设置socket (转贴)
- setsockopt 设置socket
- setsockopt 设置socket
- setsockopt 设置socket
- setsockopt 设置socket
- setsockopt 设置socket
- setsockopt 设置socket
- setsockopt 设置socket
- C++ 友元关系
- C++调用C函数
- C#中国象棋代码-棋子移动类
- ExtJs6.0.0学习之路(一)安装与配置
- iOS9遇到的问题
- socket setsockopt
- mysql+mybatis 集合查询配置
- Xcode升到6.4插件失效,与添加插件不小心点击Skip Bundle解决办法
- C函数和C++函数相互调用
- C#中DataGridView控件使用大全
- 在Swift中,如何像Objective-C定义可选接口?
- Menu的用法
- iOS 【序列化 与 反序列化】
- 微信红包JAVA代码整理