socket.shutdown по сравнению с socket.close

  1. Пожалуйста, переместите hybris в более короткую папку без пробелов (это может привести к действительно странным ошибкам).
  2. Проверьте версию JDK (1.7)
  3. . Когда вы просто распаковываете ваш архив гибридов должен иметь только две папки в $ HYBRIS / hybris bin sampleconfiguration

Затем вам нужно перейти на

$ HYBRIS / hybris / bin / platform

и вызов:

./ setantenv.bat

next

ant clean

и выберите свой профиль (развить)

, после чего вы можете использовать

ant all

для создания вашего приложения для гибридов.

118
задан Jason Baker 3 January 2009 в 20:37
поделиться

6 ответов

Вот один объяснение :

, Как только сокет больше не требуется, программа вызова может отбросить сокет путем применения близкой подпрограммы к дескриптору сокета. Если сокету надежной доставки связали данные с ним, когда завершение происходит, система продолжает делать попытку передачи данных. Однако, если данные все еще не поставляются, система отбрасывает данные. Если прикладной программе не нравятся любые незаконченные данные, она может использовать подпрограмму завершения работы на сокете до закрытия его.

36
ответ дан Bob Nadler 5 November 2019 в 08:35
поделиться

Объяснение завершения работы и близко: Корректное завершение работы (MSDN)

Завершение работы (в Вашем случае) указывает к другому концу соединения нет никакого дальнейшего намерения читать из или записать в сокет. Тогда близко освобождает любую память, связанную с сокетом.

завершение работы Исключения может заставить сокет задерживаться в стеке OSs, пока соединение не было закрыто корректно.

IMO имена 'завершение работы' и 'близко' вводят в заблуждение, 'закрывают' и 'уничтожают', подчеркнул бы их различия.

18
ответ дан Dale Reidy 5 November 2019 в 08:35
поделиться

существуют некоторые ароматы завершения работы: http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.shutdown.aspx . *отклоните, подобно.

4
ответ дан Ray Tayek 5 November 2019 в 08:35
поделиться

Вызов close и shutdown имеет два различных эффекта на базовый сокет.

первая вещь указать состоит в том, что сокет является ресурсом в базовой ОС и , несколько процессов могут иметь дескриптор для того же базового сокета.

, Когда Вы звоните close, это постепенно уменьшает количество дескриптора одним и если количество дескриптора достигло нуля тогда сокет и связалось, соединение проходит нормальную близкую процедуру (эффективно отправляющий FIN / EOF одноранговому узлу), и сокет освобожден.

вещь обратить внимание на вот состоит в том, что, если количество дескриптора не достигает нуля, потому что другой процесс все еще имеет дескриптор к сокету тогда, соединение не закрывается, и сокет не освобожден.

, С другой стороны, вызов shutdown для чтения и записи завершений базовое соединение и отправляет FIN / EOF одноранговому узлу независимо от того, сколько процессов имеет дескрипторы к сокету. Однако это не делает , освобождают сокет, и все еще необходимо звонить близко позже.

226
ответ дан Arvid 5 November 2019 в 08:35
поделиться

Shutdown(1), заставляет сокет больше не отправлять данные

Это полезно для

1- Промывки буфера

2- Обнаружения странных ошибок

3- Безопасной защиты

Позвольте мне объяснить больше, когда вы отправляете данные из A в B, не гарантируется, что они будут отправлены в буфер A os. в B, он гарантированно будет отправлен только в буфер A os, который в свою очередь отправляет его в буфер B os

Таким образом, вызывая shutdown(1) на A, вы промываете буфер A и выдается ошибка если буфер не пуст, т.е. данные еще не были отправлены пиру

Однако это необратимо, так что вы можете сделать это после того, как вы полностью отправили все свои данные и хотите быть уверены, что они, по крайней мере, находятся на пире. os buffer

2
ответ дан 24 November 2019 в 01:55
поделиться

Разве приведенный выше код не неправильный?

Вызов закрытия сразу после вызова выключения может заставить ядро ​​все равно отбросить все исходящие буферы .

Согласно http://blog.netherlabs.nl/articles/2009/01/18/the-ultimate-so_linger-page-or-why-is-my-tcp-not -reliable между выключением и закрытием необходимо подождать, пока чтение не вернет 0.

5
ответ дан 24 November 2019 в 01:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: