UNIX 소켓, SOCK_SEQPACKET vs SOCK_DGRAM
의 로컬타입이 것 .AF_UNIX
),SOCK_STREAM
,SOCK_DGRAM
★★★★★★★★★★★★★★★★★」SOCK_SEQPACKET
그건 알면서도SOCK_STREAM
하고, API를 합니다.TCP의 닉스 소소 ?이 이? ?? ???SOCK_DGRAM
★★★★★★★★★★★★★★★★★」SOCK_SEQPACKET
무슨 일입니까?
것들은인 것이기 에, 가 이 제도를 시행할 낼 수 없다.SOCK_DGRAM
패킷 순서를 변경할 수 있습니다.
ㄴ, ㄴ, ᄃ도 그래요?SOCK_DGRAM
/SOCK_SEQPACKET
흐름 제어를 채용하거나 느린 리더의 경우 메시지를 폐기할 수 있습니까?
여기서의 가장 큰 차이점은SOCK_SEQPACKET
conneciton을 지향하는 반면SOCK_DGRAM
렇지않않 않않않다다
이것은, 복수의 클라이언트프로세스가 통신하고 있는 경우, 접속의 서버측(UNIX 소켓을 리슨 하는 프로세스)에서 주로 문제가 됩니다.
★★★★★★★★★★★★★★★★ SOCK_DGRAM
클라이언트 데이터그램은 리스닝 소켓에 직접 인터리브 됩니다.★★★★★★★★★★★★★★★★ SOCK_SEQPACKET
를 사용하여 클라이언트별로 개별 클라이언트소켓을 생성합니다.accept
따라서 각 클라이언트로부터 데이터그램을 개별적으로 수신합니다.
★★man 3 accept
:
accept() 시스템콜은 접속 기반 소켓타입(SOCK_STREAM, SOCK_SEQPACKET)과 함께 사용됩니다.
다음은 용도의 사용 사례에 대한 좋은 기사입니다.SOCK_SEQPACKET
IP 프로토콜 패밀리에서는 실제로 사용할 수 없다는 사실과 기존 TCP 의미론에서 동일한 정보를 얻을 수 있는 방법:
http://urchin.earth.li/ ~ twic / Sequenceed _ Packets _ Over _ Ordinary _ TCP . html
:SOCK_SEQPACKET
이 훨씬 SOCK_STREAM
SOCK_DGRAM
.
참조된 웹사이트에서 인용:
SOCK_SEQPACKET 소켓타입은 SOCK_STREAM 타입과 비슷하며 커넥션 지향이기도 합니다.이들 유형의 유일한 차이점은 SOCK_SEQPACKET 유형을 사용하여 레코드 경계를 유지하는 것입니다.레코드는 1개 이상의 출력 조작을 사용하여 송신하고 1개 이상의 입력 조작을 사용하여 수신할 수 있지만, 1개의 조작으로 복수의 레코드의 일부가 전송되는 일은 없습니다.recvmsg() 함수에 의해 반환된 수신 메시지플래그 내의 MSG_EOR 플래그를 통해 레코드 경계를 수신자에게 표시할 수 있습니다.최대 레코드 크기를 적용할지 여부는 프로토콜에 따라 다릅니다.
SOCK_SEQPACKET은 SOCK_STREAM의 보증(주문 유지, 전달 보증, 복제 없음)을 제공하지만 SOCK_DGRAM과 마찬가지로 패킷 경계는 기술되어 있습니다.기본적으로 두 가지 프로토콜 유형이 혼합되어 있습니다.
TCP/IP 패밀리에서는 SCTP는 SOCK_STREAM(TCP 유사)과 SOCK_SEQPACKET를 모두 실장합니다.유감스럽게도 Windows에서는 재고가 없습니다.
socket (2) Linux 제공 manpage: "DGRAM: 데이터그램(연결 없음, 신뢰할 수 없는 메시지), SEQPACKET: 데이터그램에 대한 시퀀싱되고 신뢰할 수 있는 [양방향] 연결 기반 데이터 전송 경로"상당한 차이입니다.
unix(7) linux 제공 manpage에는 "SOCK_DGRAM, 메시지 경계를 보존하는 데이터그램 지향 소켓, 메시지 경계를 보존하고 전송된 순서대로 메시지를 전달하는 연결 지향 소켓용 SOCK_SEQPACKET"이라고 쓰여 있습니다.
표준에서는 SOCK_DGRAM을 사용하여 패킷 순서를 변경할 수 있습니다(즉, OS가 패킷을 순서대로 건네주는 경우, 이것은 실장 고유의 기능입니다).아니면 순전히 타이밍의 행운일 수도 있습니다.)
Linux의 af_file/af_unix 구현에는 흐름 제어가 있지만, 이는 표준 지정 동작과 전혀 상관할 필요가 없습니다.
TCP 및 UDP 소켓과 마찬가지로 엔드포인트 간에 (1 대 1) 및 (1 대 다)의 두 가지 형식을 가진 SCTP(Stream Control Transmission Protocol) 소켓이 있습니다.1 대 1은 SOCK_STREAM을 사용하고 1 대 다수는 SOCK_SEQPACKET을 사용합니다.
언급URL : https://stackoverflow.com/questions/10104082/unix-socket-sock-seqpacket-vs-sock-dgram
'IT이야기' 카테고리의 다른 글
HashMap, LinkedHashMap 및 TreeMap의 차이점 (0) | 2022.06.30 |
---|---|
내보낸 이벤트가 Vue JS 구성 요소의 상위 메서드를 호출하지 않음 (0) | 2022.06.30 |
Java에서 클래스 개체가 다른 클래스 개체의 하위 클래스인지 확인합니다. (0) | 2022.06.30 |
스프링 AOP와 Aspect J (0) | 2022.06.29 |
C/C++에서의 보이드 메인과 int 메인과의 차이는? (0) | 2022.06.29 |