
#include <stdio.h> |
#include <sys/socket.h> |
#include <unistd.h> |
#include <fcntl.h> |
#include <sys/types.h> |
#include <netinet/in.h> |
#include <stdlib.h> |
#include <time.h> |
#include <strings.h> |
#include <errno.h> |
int main (int argc,char * argv[]) |
{ |
int servfd,clifd; |
struct sockaddr_in servaddr,cliaddr; |
if((servfd=socket(AF_INET,SOCK_STREAM,0))<0) |
{ |
printf("Create socket error!\n"); |
return -1; |
} |
bzero(&servaddr,sizeof(servaddr)); |
servaddr.sin_family=AF_INET; |
servaddr.sin_port=htons(5000); |
servaddr.sin_addr.s_addr=htonl(INADDR_ANY); //inet_addr("192.168.0.1"); |
int option=1; |
setsockopt(servfd,SOL_SOCKET,SO_REUSEADDR,(char *)&option,sizeof(option)); |
struct linger li; |
li.l_onoff=1; |
li.l_linger=1; |
setsockopt(servfd,SOL_SOCKET,SO_LINGER,(char *)&li,sizeof(li)); |
if(bind(servfd,(struct sockaddr * )&servaddr,sizeof(servaddr))<0) |
{ |
perror("bind to port 5000 failure"); |
return -1; |
} |
if(listen(servfd,10)<0) |
{ |
perror("listen error"); |
return -1; |
} |
int flags = fcntl(servfd, F_GETFL, 0); |
fcntl(servfd, F_SETFL, flags | O_NONBLOCK); |
while(1) |
{ |
socklen_t len; |
len=sizeof(cliaddr); |
clifd=accept(servfd,(struct sockaddr *)&cliaddr,&len); |
if(clifd < 0) |
{ |
if (errno==EAGAIN || errno == EWOULDBLOCK) |
{ |
usleep(10000); |
continue; |
} |
else |
{ |
perror("call accept error"); |
break; |
} |
} |
char szIp[17]; |
bzero(szIp,17); |
inet_ntop(AF_INET,&cliaddr.sin_addr,szIp,16); |
printf("from client IP:%s,Port:%d\n",szIp,ntohs(cliaddr.sin_port)); |
char buf[256]; |
time_t t; |
time(&t); |
int datalen=sprintf(buf,"Server:%u\n",(unsigned int)t); |
send(clifd,buf,datalen,0); |
close(clifd); |
} |
close(servfd); |
return 0; |
} |



