#include "sock_api/sock_api.h"
void tcp_server_test(void *arg)
{
struct sockaddr_in sin;
socklen_t sinlen;
fd_set readfds;
fd_set errofds;
struct timeval timeo;
int ret;
int fd;
struct sockaddr_in addr;
int reuse;
fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd < 0){
printf("\n >>>>>> socket error\n");
return;
}
if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const char *)&reuse, sizeof(int)) < 0)
{
printf("\n >>>>>> setsockopt SO_REUSEADDR error\n");
return;
}
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("192.168.1.101");
addr.sin_port = htons(5200);
if (connect(fd, (struct sockaddr *)&addr, sizeof(struct sockaddr_in))){
printf("\n >>>>>> connect error\n");
return;
}
int opts;
opts=fcntl(fd, F_GETFL, 0);
if(opts<0)
{
printf("\n >>>>>> F_GETFL error\n");
return;
}
opts = opts | O_NONBLOCK;
if(fcntl(fd,F_SETFL,opts)<0)
{
printf("\n >>>>>> F_SETFL error\n");
return;
}
while(1){
FD_ZERO(&readfds);
FD_SET(fd, &readfds);
FD_ZERO(&errofds);
FD_SET(fd, &errofds);
timeo.tv_sec = 1;
timeo.tv_usec = 1000 * 10;
ret = select(fd + 1, &readfds, (fd_set *)0, &errofds, &timeo );
if (ret == 0){
continue;
}
else if (ret < 0){
printf("\n >>>>>> ret = %d\n",ret);
break;
}
if (FD_ISSET(fd, &errofds))
{
printf("\n >>>>>> exit ok!\n");
break;
}
sinlen = sizeof(sin);
if (FD_ISSET(fd, &readfds))
{
char buf[128];
ret = recv(fd,buf,sizeof(buf),0);
if(ret <= 0){
printf("\n >>>>>> exit ok!\n");
break;
}
put_buf(buf,ret);
}
}
}
int sock_test(void)
{
thread_fork("tcp_server_test", 18, 0x2E00, 64, 0, tcp_server_test, NULL);
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)