블로킹 소켓 서버를 비 블로킹 버전으로 다시 쓰는 데 문제가 있습니다. 사실, 나는 소켓을 더 이상 연결하지 못하는 것 같아요, 나는 오늘의 대부분을 인터넷 검색하고, 내가 여기 저기에있는 다른 해결책을 시도했지만, 아무도 제대로 작동하지 않는 것 같습니다 ... 현재 내 서버 루프는 새로운 소켓을 수락하지 않고 select() 호출 시간 초과를 유지합니다
TCP 비 블로킹 소켓 연결의 클라이언트 측에 select()의 대안이 있습니까? select()은 주로 여러 연결에 사용되지만 내 클라이언트는 단일 연결 만 사용합니다. 결과적으로 단일 소켓에서 I/O를 인식 할 수있는 대체 기능이 있는지 스스로에게 질문했습니다. 아마 더 빠를 것이고 나는 fd_set 처리를 모두 필요로하지 않을 것입니다.
비 차단 소켓 (C/C++) 및 select을 사용하여 네트워크 통신 프로그램을 작성 중입니다. 프로그램이 꽤 크기 때문에 소스 코드를 업로드 할 수 없습니다. 매우 적극적인 테스트 세션에서 TCP 및 UDP를 자주 열고 닫는 테스트 코드를 사용합니다. 항상 한쪽 끝이 응답하지 않고 98 또는 99 % 이상의 CPU 사용량을 갖습니다. 그런 다음 gdb을
select 함수를 사용하여 다른 파일 설명자를 사용하려고합니다. 프로그램이 시작되면 일정 간격으로 다른 클라이언트에 패킷을 보내기 시작해야합니다. 내 첫 질문은 while 루프와 select 함수의 기능을 방해하지 않고 main while 루프에서 타이머를 어떻게 사용할 수 있는가이다. 타이머가 실행되는 동안 사용자 입력을 받아야하기 때문입니다. 두 번째
하나의 사용자가 호스트에 연결할 수있는 간단한 채팅 프로그램을 작성하려고합니다. 두 사람은 서로 이야기 할 수 있어야합니다 (서로 방해 할 수도 있지만 괜찮습니다). select()으로 어려움을 겪고 있습니다. client.c #include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <e
많은 시도를 한 후 내 select()을 얻을 수 없었습니다. 나는 너무 길다! 나는 결과로 -1을 뻥니다. this guide을 팔로우하고 있습니다. listen(sock, MAXQUEUE);
build_select_list(sock, connectlist, highsock, socks);
readsocks = select(FD_SETSIZE, &s