#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
int main()
{
int server_sockfd,client_sockfd;
int server_len,client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
создать новый сокетLinux сокет принимает не был заблокирован
unlink("server_socket");
server_sockfd=socket(AF_INET,SOCK_STREAM,0);
имя его
server_address.sin_family=AF_INET;
server_address.sin_addr.s_addr=htonl(INADDR_ANY);
server_address.sin_port=htons(9734);
server_len=sizeof(server_address);
bind(server_sockfd,(struct sockaddr *)&server_address,server_len);
комплект блок
int flags=fcntl(server_sockfd,F_GETFL,0);
if(flags&O_NONBLOCK==1){
printf("NONBLOCK");
}else{
printf("BLOCK");
}
flags=flags&~O_NONBLOCK;
fcntl(server_sockfd,F_SETFL,flags);
if(flags&O_NONBLOCK==1){
printf("NONBLOCK");
}else{
printf("BLOCK");
}
слушать
listen(server_sockfd,5);
while(1){
char ch;
printf("server waiting\n");
client_len=sizeof(client_address);
client_sockfd=
accept(server_sockfd,(struct sockaddr*)&client_sockfd,&client_len);
он блокируется в первый раз
read(client_sockfd,&ch,1);
ch++;
write(client_sockfd,&ch,1);
close(client_sockfd);
}
}
, когда клиент подключен первый, я работать, но следующий не будет работать
'client_sockfd = accept' Проверьте значение client_socket. Это может быть -1 -> check errno. Также проверьте возвращаемое значение из read() – wildplasser
Сокет будет блокироваться по умолчанию, поэтому нет необходимости выполнять вызовы fcntl. Вызов 'unlink' совершенно не нужен. Во-вторых, вы ** должны ** проверить возвращаемое значение 'bind', которое, скорее всего, не работает (и' listen', 'socket' и т. Д. Тоже ...). –