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));
//设置接收超时
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
原创粉丝点击