기본 색인 | 섹션 4 | 日本語 | 옵션 |
T/TCP 특정의 connection의 전세그먼트(segment)에 대해, 어느 옵션을 몇개인가 포함하는 것으로, T/TCP 확장은 기능합니다. 이것에 의해 1조의 호스트간에서의 최초의 접속을 제외한 모든 3 웨이한드시크를 잃을 수가 있습니다. 한층 더 같은 옵션을 이용해, 낡은 중복 한 패킷을 보다 확실히 판별하는 것이 가능하고, 따라서 TCP 프로토콜이 접속을 닫은 후, 상태를 유지하지 않으면 안 된다 시간을 줄일 수가 있습니다. "net.inet.tcp.rfc1644" 의 MIB 의 변수는 실행시에 T/TCP 네고시에이션을 무효화하기 위해서 사용할 수가 있습니다. 그렇지만, 본프로토콜은, T/TCP 가 아닌 시스템이 T/TCP 확장된 시스템과 통신하려고 했을 때에, 자동적으로 표준의 TCP 에 되돌려 통신하는 것을 프로텍션하기 위해서 설계된 것입니다.
char request[REQ_LEN]; struct sockaddr_in sin; int sock, req_len;sock = socket(PF_INET, SOCK_STREAM, 0);
/* request[] 와 sin 의 준비 */
err = sendto(sock, request, req_len, MSG_EOF, (struct sockaddr *) &sin, sin.sin_len);
/* 에러 처리 */
req_len = read(sock, request, sizeof request); close(sock);
/* 응답 처리 */
sendto() (을)를 호출하면(자), 그 때의 소켓 상태는 connect(2) 및 shutdown(2) 시스템 콜이 사용되었을 때와 같은 상태가 되는 것에 주의해 주세요. 즉, 이 소켓상에서 실행하는데 적합한 조작은, read(2) 및 close(2) 뿐입니다 (클라이언트의 TCP 송신부는 벌써 셧다운 되고 있으므로, 이 소켓을 다른 발송지에 connect(2) 할 수 없습니다).
기존의 서버가 T/TCP 확장 기능을 사용하도록(듯이) 변경을 실시하려면 , 최초의 옵션을 이용하는 것은 일반적으로 타당한 선택입니다. 단순하게 setsockopt(sock, IPPROTO_TCP, TCP_NOPUSH, &One, sizeof One) (여기서 One (은)는 0 이외의 값의 정수의 변수입니다)에의 콜을 추가할 뿐(만큼)이기 때문입니다. 무엇인가 데이터가 송신되기 전에 (소켓의 버퍼가 포화하고 있지 않는 한) 서버측의 소켓은 닫지 않으면 안됩니다.
2 번째의 옵션은, 새로운 서버에는 보다 바람직한 것입니다. 경우에 따라서는, 낡은 서버에도 적용할 수 있을 정도로 간단합니다. 이 경우, 응답 단계에서 통상 write() 의 호출을 포함하고 있습니다만, 그것을 다음과 같이 옮겨놓습니다 :
sendto(sock, buf, len, MSG_EOF, (struct sockaddr *) 0, 0)
이 경우, 응답은 즉시 송신됩니다만, 클라이언트의 경우와 같게, 소켓은 이 시점에서 아무것도 사용할 수 없습니다. 즉시 클로우즈 해야 합니다.
FreeBSD 2.1 | TTCP (4) | January 18, 1995 |
기본 색인 | 섹션 4 | 日本語 | 옵션 |
Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.
“ | I think Unix and snowflakes are the only two classes of objects in the universe in which no two instances ever match exactly. | ” |
— Noel Chiappa |