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中的默认配置: