Jumping Bytes and Hopping Bits
the church of tech
Menu

넌 블로킹 소켓 예제 August 2, 2019

나는 단지 INET 소켓에 대해 이야기 할 것이지만 사용 중 소켓의 99 % 이상을 차지합니다. 그리고 난 단지 스트림 소켓에 대해 이야기 합니다 -하지 않는 한 당신이 정말로 무엇을 하 고 있는지 (이 경우이 HOWTO 당신을 위해 하지 않습니다!), 다른 어떤 것 보다 STREAM 소켓에서 더 나은 동작 및 성능을 얻을 거 야. 나는 소켓이 무엇인지의 신비뿐만 아니라 차단 및 비 차단 소켓작업 방법에 대한 몇 가지 힌트를 정리하려고합니다. 그러나 나는 소켓을 차단하는 것에 대해 이야기로 시작하겠습니다. 비차단 소켓을 처리하기 전에 어떻게 작동하는지 알아야 합니다. 지금까지 이 장에서는 select()를 사용하여 소켓에서 데이터를 읽을 수 있는 시기를 감지할 수 있습니다. 그러나 결과를 기다릴 필요없이 send(), recv(), connect(), accept() 등을 호출할 수 있는 것이 유용한 경우가 있습니다. 예를 들어 각 클라이언트가 서버에 연결하는 상태와 상태를 유지하려면 각 클라이언트에 대한 전체 구조체가 필요합니다. 따라서 소켓 목록은 실제로 이러한 클라이언트 레코드의 데이터 구조가 되며 그 중 하나의 필드만 소켓이 됩니다.

따라서 소켓 배열을 반복하는 대신 클라이언트 레코드의 이 데이터 구조를 통과할 수 있습니다. 또는. 선택 호출을 준비하기 전에 클라이언트 레코드를 통과하고 즉석에서 해당 소켓 배열을 생성합니다. 이 것의 한 가지 장점은 원하는 경우 이 소켓을 테스트할지 여부를 결정하기 위해 특정 조건을 고려할 수 있다는 것입니다 (이러한 조건이 무엇인지 생각할 수는 없지만이 요구 사항은 생각할 수 있습니다). 따라서 이 배열을 만들고 읽기 집합을 초기화하고 결과 집합을 테스트하는 데 사용합니다. 두 가지 장점이 떠오릅니다: 1) 데이터 구조를 통과하는 것보다 배열을 반복하는 것이 더 간단하고 효율적이어야 하며, 2) 이 작업을 두 번 수행해야 하므로 효과적으로 비용을 두 배로 늘릴 수 있습니다. 로컬 변수에서 O_NONBLOCK(비차단) 플래그를 설정합니다. (물론 다른 깃발을 조작하지 않도록 주의하십시오) 전체 예제, C에서 TCP/IP 소켓에 대 한 저자의 소스 코드 페이지로 이동: 마이클 J. Donahoo와 케네스 L. Calvert에 의해 프로그래머에 대 한 실용적인 가이드 (아래 적절 한 링크를 클릭): 철저 한 처리는이 페이지의 범위를 넘어 있기 때문에, 내 여기에 치료는 매우 피상적 일 것이다.

Categories: Uncategorized