TCP、UDP提高端口的重用

使用setsockopt函数
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:需设置的选项,而有部分选项需在listen/connect调用前设置才有效

  • optval:指针,指向存放选项值的缓冲区

  • optlen:optval缓冲区长度

注意这里使用的optname是SO_REUSEADDR

具体使用如下

  //调高端口的重用性
  int on;
  if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(int)) << 0) {
    perror("setsockopt error\n");
    return 0;
  }

  if (bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1) {
    perror("bind error:");
  }
需要在bind之前调用这个函数,这样就不会出现bind:address already in use这个样的错误了
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。