当前位置:   article > 正文

socket connect超时设置_timeout.tv_sec = 1; timeout.tv_usec = 0;

timeout.tv_sec = 1; timeout.tv_usec = 0;

场景:客户端调用接口时,默认调用的超时时间会很长,可以通过设置发送的超时时间来控制。

  1. int create_server_socket(const char *node_ip, int port)
  2. {
  3. int sockfd;
  4. int sendbytes;
  5. char buf[MIDLEN] = "";
  6. struct hostent* host;
  7. struct sockaddr_in server_addr;
  8. if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
  9. {
  10. Log(LOGFILE, "%d [%s] create socket error.\n", __LINE__, __FUNCTION__);
  11. return RET_ERROR;
  12. }
  13. bzero(&server_addr, sizeof(server_addr));
  14. server_addr.sin_family = AF_INET;
  15. server_addr.sin_port = htons(port);
  16. server_addr.sin_addr.s_addr = inet_addr(node_ip);
  17. /*TCP发送超时设置*/
  18. struct timeval timeout;
  19. timeout.tv_sec = 1; // 设定1秒超时
  20. timeout.tv_usec = 0;
  21. setsockopt(sockfd, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout));
  22. if (connect(sockfd, (struct sockaddr*) & server_addr, sizeof(server_addr)) == -1)
  23. {
  24. Log(LOGFILE, "%d [%s] connect error.\n", __LINE__, __FUNCTION__);
  25. return RET_ERROR;
  26. }
  27. return sockfd;
  28. }
  1. /*TCP超时设置*/
  2. struct timeval timeout;
  3. timeout.tv_sec = 1; // 设定1秒超时
  4. timeout.tv_usec = 0;
  5. setsockopt(sockfd, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout));

主要是函数setsockopt的使用,注意其中的参数。

  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. 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缓冲区长度。

optname设置不同的值实现不同的效果。

参考:https://baike.baidu.com/item/setsockopt/10069288?fr=aladdin

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/225105
推荐阅读
相关标签
  

闽ICP备14008679号