TCP 소켓을 비 차단 모드로 설정하고 소켓 전송 버퍼가 처음에 설정된 경우 을 보내면 모든 자료. EAGAIN 오류로 인해 send가 실패하면 send-socket 버퍼를 증가시킬 수 있습니까? Linux OS를 사용하고 있습니다. sendbuffer 크기의 크기 조정이 허용되는지 여부를 이해하고 싶었습니다. tcp 남자 page에서 "개별 연결에서 소켓 버퍼 크기는 listen (2) 또는 connect (2) 호출이 효력을 발생하기 전에 설정되어야합니다." 그게 왜 질문이 발생했습니다버퍼 가득 참 오류로 인해 전송이 실패하면 소켓 전송 버퍼 크기를 늘릴 수 있습니까?
답변
커널 내부 네트워크 스택, 즉 실행중인 운영 체제 (구현하지 않은 상태)의 구현 세부 사항입니다. 나는 주어진 소켓 전용 메모리를 제한 단지 숫자 이후 가장 현대적인 OS-ES에서이 작업을 수행 할 수 있습니다 생각하지만 때문에이 문제를 접근 완전히 잘못된 방법 :
- 당신은 무기한 송신 버퍼 크기를 늘릴 수 없습니다 , OS는 어느 시점에서 그것을 덮을 것입니다.
- TCP는 당신을 제공 흐름 제어 - 느린 수신기가 아래로 빠른 보낸 사람을 느리게 -와 수신기가 충분히 빠르게 데이터를 소비하지 않는, 그래서 만약 그 커널 메모리에 더 많은 데이터를 밀어, TCP의는 그 신뢰성과 관련된 장점이다 어떤 식 으로든 상황을 개선하지 못합니다.
- 게으르다가 커널이 모든 버퍼링을 수행하기를 원합니다.
트래픽 버스트 메모리 요구 사항, 미리 설정된 소켓 송신 버퍼 크기, 애플리케이션 측 버퍼를 알아보십시오.
Linux OS를 사용하고 있습니다. sendbuffer 크기의 크기 조정이 허용되는지 여부를 이해하고 싶었습니다. tcp 맨 페이지 [link] (http://linux.die.net/man/7/tcp)에서 "개별 연결에서 소켓 버퍼 크기는 listen (2) 또는 connect (2) 호출 전에 설정되어야합니다 그것이 효력을 발휘하기 위해서는. " 그 질문이 제기 된 이유는 무엇입니까? – user1723421
그럼 리눅스에 대한 대답입니다. 당신은 그것을 미리 설정할 필요가 없습니다. –
그래서 비 차단 모드에서 소켓을 사용하고 모든 데이터를 전송해야한다면 버퍼 크기를 애플리케이션 측에서 최대 버퍼 크기로 미리 설정해야합니까? – user1723421
당신은 네트워킹 버퍼를 조정할 수 있습니다 (http://www.cyberciti.biz/faq/linux-tcp-tuning/)하지만 그건 좋은 생각이 아닙니다. 문제는 크기 버퍼가 무엇이든 관계없이 발생할 수 있으므로이 경우를 처리하기 위해 코드를 작성해야합니다.
- 1. 어떻게 소켓 UDP 아래에 버퍼 크기를 설정할 수 있습니까?
- 2. 자바 소켓 버퍼 문제
- 3. 소켓 수신 버퍼 크기
- 4. UDP 소켓 버퍼 오버플로 감지
- 5. iPhone 최대 소켓 버퍼 크기
- 6. C 프로그래밍 소켓 버퍼
- 7. 소켓 버퍼 읽기
- 8. 원시 소켓 수신 버퍼
- 9. 버퍼 크기를 초과합니까?
- 10. 버퍼 외부에서 읽는 것이 버퍼 오버런으로 계산됩니까?
- 11. 다차원 배열 및 버퍼 전송
- 12. 소켓 프로그래밍에 적합한 버퍼 크기는 무엇입니까?
- 13. 프레임 버퍼/컬러 버퍼?
- 14. C++의 소켓 연결을위한 버퍼 크기
- 15. C# 소켓 수신 버퍼 크기 비용
- 16. Google 프로토콜 버퍼 - 고정 크기 버퍼?
- 17. SocketException 시스템에 충분한 버퍼 공간이 없거나 큐가 가득 차서 소켓 작업을 수행 할 수 없습니다.
- 18. 소켓과 버퍼
- 19. 이벤트 로그 파일이 가득 참
- 20. Inputstream Reader에서 버퍼 크기를 어떻게 바꿀 수 있습니까?
- 21. 프로세스에서 프로세스로 파이프를 통한 버퍼 크기 전송
- 22. .NET 소켓 버퍼 오버플로 오류 없음
- 23. MySQL 벌크의 버퍼 크기를 결정하는 방법 INSERT
- 24. 어떻게 소켓 UDP 아래에 버퍼 크기를 설정할 수 있습니까? C#을
- 25. DirectSound - 네트워크의 데이터로 가득 찬 스트리밍 버퍼 재생 문제!
- 26. 최대 버퍼 수
- 27. 플렉스 4.6 소켓 수신 버퍼 크기 증가
- 28. C에서 버퍼 길이 및 버퍼 오버플로 보내기
- 29. 커널 I/O 버퍼 크기를 변경하는 방법
- 30. 리눅스 소켓 버퍼 오버 플로우는 어떻게됩니까?
맨 페이지가 잘못되었다고 생각합니다. listen() 또는 connect() 전에 64k * 이상의 버퍼 크기 *를 설정해야한다고 믿어야합니다. window scale 협상이 발생하기 때문입니다. – EJP
실제로 그 경우조차 accept() 전에 listen()하지 말아야합니다. – EJP
이것은 수신 버퍼에만 적용되고 송신 버퍼에는 적용되지 않습니다. – EJP