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

Linux环境设置Socket接收和发送超时:

须如下定义:struct timeval timeout = {3,0};

//设置发送超时

setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&timeout,sizeof(struct timeval));

//设置接收超时

setsockopt(socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&timeout,sizeof(struct timeval));

另外常用的方式是使用select函数设置fd为读时间,并设置超时时间。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

extern char *optarg;

extern int optind, opterr, optopt;

#include

#define LOG_ERROR my_printf

int my_printf(char *fmt, ...)

{

char buffer[];

va_list argptr;

int length = ;

va_start(argptr, fmt);

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

va_end(argptr);

printf("%s\n", buffer);

return (length + );

}

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

{

int client_socket = socket(AF_INET,SOCK_STREAM,);

if( client_socket < )

{

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

return -;

}

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

struct sockaddr_in server_addr;

bzero(&server_addr,sizeof(server_addr));

server_addr.sin_family = AF_INET;

if(inet_aton(host,&server_addr.sin_addr) == )

{

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

return -;

}

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)) == -)

{

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

local_host, errno, strerror(errno));

close(client_socket);

return -;

}

}

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) < )

{

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

close(client_socket);

return -;

}

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

return client_socket;

}

int main()

{

int sock = ;

struct timeval timeout = {,};

int tm = ;

int res = ;

char buf[];

sock = start_client("127.0.0.1", );

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

tm = time();

res = read(sock, buf, );

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

return ;

}

设置session超时的三种方式

设置session超时的三种方式 1. 在容器中设置:如在tomcat-7\conf\web.xml中设置 Tomcat默认session超时时间为30分钟,可以根据需要修改,负数或0为不限制sess ...

Python 发送 email 的两种方式

Python发送email的两种方式,分别为使用登录邮件服务器.调用sendmail命令来发送三种方法 Python发送email比较简单,可以通过登录邮件服务来发送,linux下也可以使用调用sen ...

session处理超时的三种方式

1.      在web容器中设置(此处以tomcat为例) 在tomcat-5.0.28\conf\web.xml中设置,以下是tomcat 5.0中的默认配置:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值