Я впервые использую сокеты, и у меня возникают проблемы с принятием соединений на стороне сервера.Мой сервер предназначен для приема только одного соединения за раз.Как только соединение получено, текущая дата и время записываются в сокет, а затем клиент распечатывает дату и время, которые он получил от сервера.Мой сервер имеет следующий код:
cout << "Server: Waiting for connections." << endl;
client_length = sizeof(client_address);
connection_fd = accept(listen_fd, (struct sockaddr*)&client_address, (socklen_t*)&client_length);
cout << "Server: Client connected" << endl;
Когда я запускаю свой сервер, я получаю следующий вывод:
./server&
Server: Waiting for connections.
Затем, когда я запускаю свой клиент, я получаю следующий вывод:
./client 127.0.0.1
Client: Connecting to: 127.0.0.1
Client: Connected to server.
Sun Sep 25 13:20:07 2011
Кажется, клиент печатает правильные данные, но сервер никогда не печатает, что клиент подключен.Что-то здесь не так.Другой симптом - когда я пытаюсь записать в канал (клиент пишет, сервер читает), клиент получает ошибку сломанного канала.Есть ли что-то, что мне не хватает?Если есть какой-либо код, который вы хотели бы увидеть, пожалуйста, спросите.
Редактировать: Здесь сервер работает под управлением strace.Кажется, ничего не происходит после распечатки accept.Странно?
write(2, "Server: Socket created.", 23Server: Socket created.) = 23
write(2, "\n", 1
) = 1
bind(3, {sa_family=AF_INET, sin_port=htons(4007), sin_addr=inet_addr("0.0.0.0")}, 16) = -1 EADDRINUSE (Address already in use)
write(2, "Server: Address and port bound t"..., 41Server: Address and port bound to socket.) = 41
write(2, "\n", 1
) = 1
listen(3, 100) = 0
write(2, "Server: Socket is now a listenin"..., 41Server: Socket is now a listening socket.) = 41
write(2, "\n", 1
) = 1
write(2, "Server: Waiting for connections.", 32Server: Waiting for connections.) = 32
write(2, "\n", 1
) = 1
accept(3,
Спасибо.