int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen); sockfd: 标识一个套接口的描述字 level: 选项定义的层次;支持SOL_SOCKET、IPPROTO_TCP、IPPROTO_IP和IPPROTO_IPV6 optname:需设置的选项 optval: 指针,指向存放选项值的缓冲区 optlen: optval缓冲区长度 成功返回0,失败返回-1
1. 如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:(程序里不要写close关闭描述符,其实写不写都无所谓,这里设置了可以重用) 以前编程都没设置这个,默认不能重用,所以服务器端只能运行一个,不能多个同时运行; 这个接口可以在系统级别实现负载均衡。 int reuse=1; 默认这个值是0 setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&reuse,sizeof(int));
|
int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen); \ 获取本机socket信息 成功返回0,失败返回-1。 |
int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen); \ 获取accept到的客户端的地址 成功返回0,失败返回-1。 |
int shutdown(int sockfd, int how); \ 关闭读端、写端或者读写端 成功返回0,失败返回-1。 sockfd: accept 返回的描述符 how: SHUT_RD 关闭读端 SHUT_WR 关闭写端 SHUT_RDWR 关闭读写端 |