69,369
社区成员
发帖
与我相关
我的任务
分享
while(1){
size=recv(s,buff,1024,0);
write(1,buff,size);
}
while(1){
size=recv(s,buff,1024,0);
sprintf(buffer,"content %s,bytes %d",buff,size);
write(1,buffer,strlen(buffer));
}
#include <stdio.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
void process_conn(int);
int main(void)
{
int s;
struct sockaddr_in server,client;
int err;
s=socket(AF_INET,SOCK_STREAM,0);
server.sin_family=AF_INET;
server.sin_port=htons(8889);
server.sin_addr.s_addr=inet_addr("192.168.1.2");
err=bind(s,(struct sockaddr *)&server,sizeof(struct sockaddr));
if(err<0){
perror("bind");
return -1;
}
err=listen(s,2);
if(err<0){
perror("listen");
return -1;
}
while(1){
int sc;
socklen_t len=sizeof(struct sockaddr);
sc=accept(s,(struct sockaddr *)&client,&len);
pid_t pid;
pid=fork();
if(pid==0){
close(s);
process_conn(sc);
}else
close(sc);
}
return 0;
}
void process_conn(int s)
{
ssize_t size=0;
char buff[1024],buffer[1024];
while(1){
size=recv(s,buff,1024,0);
write(1,buff,size);
}
/*
while(1){
size=recv(s,buff,1024,0);
sprintf(buffer,"%s,%d",buff,size);
write(1,buffer,strlen(buffer));
}
*/
}
int flag = fcntl(sockfd, F_GETFL, 0);
fcntl(sockfd, F_SETFL, flga | O_NONBLACK);
int nIO = 1;
ioctl(sockfd, FIONBIO, &nIO);
#include <stdio.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
void process_conn(int);
int main(void)
{
int s;
struct sockaddr_in server,client;
int err;
s=socket(AF_INET,SOCK_STREAM,0);
server.sin_family=AF_INET;
server.sin_port=htons(8889);
server.sin_addr.s_addr=inet_addr("192.168.1.2");
err=bind(s,(struct sockaddr *)&server,sizeof(struct sockaddr));
if(err<0){
perror("bind");
return -1;
}
err=listen(s,2);
if(err<0){
perror("listen");
return -1;
}
while(1){
int sc;
socklen_t len=sizeof(struct sockaddr);
sc=accept(s,(struct sockaddr *)&client,&len);
pid_t pid;
pid=fork();
if(pid==0)
{
close(s);
process_conn(sc);
exit(0); //子进程要主动退出,否则子进程会继续跑,而且子进程里关闭了s,跑到accpet就 悲剧的无限错误下去,无限的子进程将被创建.
}else
{
close(sc);
}
}
return 0;
}
void process_conn(int s)
{
ssize_t size=0;
char buff[1024],buffer[1024];
while(1){
size=recv(s,buff,1024,0);
if(size<=0){return;}
write(1,buff,size);
}
}