Начал изучать сокеты беркли, до книг пока руки не дошли, начитался вики, linux.die.net и манов и написал, копируя куски из сети такой сервер(клиент тоже написал, но он интереса не представляет пока).
#include <sys/types.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main()
{
int client_socket, server_socket; // socket's descriptors for client and server
struct sockaddr_in addr; // address of the server
char buf[1024]; // buffer for incomming message
int bytes_read; // amount of bytes
server_socket = socket(AF_INET, SOCK_STREAM, 0);
if(server_socket < 0)
{
perror("can not create socket");
exit(1);
}
addr.sin_family = AF_INET; // address family - internet socket
addr.sin_port = htons(5555);
addr.sin_addr.s_addr = htonl(INADDR_ANY); // listen all local addresses
if(bind(server_socket, (struct sockaddr *)&addr, sizeof(addr)) < 0)
{
perror("error on bind");
exit(2);
}
if(listen(server_socket,1) != 0) // start listening
{
perror("can not start listening!\n");
exit(3);
}
while(1)
{
//printf("inside while\n"); // злосчастрный printf
int c;
client_socket = accept(server_socket,0,0);
while(1)
{
int bytes_read = recv(client_socket, buf, 1024, 0);
if(bytes_read <= 0) break;
printf("received %d bytes : %s", bytes_read,buf );
}
}
return 0;
}
Если оставить printf, то сообщения вычитываются, иначе - нет. Если переменную создавать на месте printf, то не помогает. Идеи?
sockets, программирование