linux socket默认超时,设置socket接收和发送超时的一种方式

#include #include#include#include#include#include#include#include#include#include#include#include

extern char *optarg;extern intoptind, opterr, optopt;

#include

#define LOG_ERROR my_printf

int my_printf(char *fmt, ...)

{char buffer[1024];

va_list argptr;int length = 0;

va_start(argptr, fmt);

length= vsnprintf(buffer,1024,fmt, argptr);

va_end(argptr);

printf("%s\n", buffer);return (length + 1);

}int start_client(const char *host, int port, const char *local_host =NULL)

{int client_socket = socket(AF_INET,SOCK_STREAM,0);if( client_socket < 0)

{

LOG_ERROR("Create socket failed, errno %d", errno);return -1;

}//设置一个socket地址结构server_addr,代表服务器的internet地址, 端口

structsockaddr_in server_addr;

bzero(&server_addr,sizeof(server_addr));

server_addr.sin_family=AF_INET;if(inet_aton(host,&server_addr.sin_addr) == 0)

{

LOG_ERROR("Server address inet_aton failed, errno %d!", errno);return -1;

}if (local_host !=NULL)

{

sockaddr_in client_addr;

client_addr.sin_family=AF_INET;

client_addr.sin_addr.s_addr=inet_addr(local_host);if (bind(client_socket,(struct sockaddr*)&client_addr, sizeof(client_addr)) == -1)

{

LOG_ERROR("\nBind client failed, local_host %s, errno %d, %s\n",

local_host, errno, strerror(errno));

close(client_socket);return -1;

}

}

server_addr.sin_port=htons(port);

socklen_t server_addr_length= sizeof(server_addr);//向服务器发起连接,连接成功后client_socket代表了客户机和服务器的一个socket连接

if(connect(client_socket,(struct sockaddr*)&server_addr, server_addr_length) < 0)

{

LOG_ERROR("Connect to %s:%d failed! error %d, %s", host, port, errno, strerror(errno));

close(client_socket);return -1;

}//write(client_socket, "Hello Server", strlen("Hello Server"));

returnclient_socket;

}intmain()

{int sock = 0;struct timeval timeout = {3,0};int tm = 0;int res = 0;char buf[1024];

sock= start_client("127.0.0.1", 5050);

setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(structtimeval));

tm= time(0);

res= read(sock, buf, 1024);

fprintf(stderr,"Read timeout %d\n", time(0) -tm);return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值