Затем вам нужно перейти на
$ HYBRIS / hybris / bin / platform
и вызов:
./ setantenv.bat
blockquote>next
ant clean
blockquote>и выберите свой профиль (развить)
, после чего вы можете использовать
ant all
blockquote>для создания вашего приложения для гибридов.
Вот один объяснение :
, Как только сокет больше не требуется, программа вызова может отбросить сокет путем применения близкой подпрограммы к дескриптору сокета. Если сокету надежной доставки связали данные с ним, когда завершение происходит, система продолжает делать попытку передачи данных. Однако, если данные все еще не поставляются, система отбрасывает данные. Если прикладной программе не нравятся любые незаконченные данные, она может использовать подпрограмму завершения работы на сокете до закрытия его.
Объяснение завершения работы и близко: Корректное завершение работы (MSDN)
Завершение работы (в Вашем случае) указывает к другому концу соединения нет никакого дальнейшего намерения читать из или записать в сокет. Тогда близко освобождает любую память, связанную с сокетом.
завершение работы Исключения может заставить сокет задерживаться в стеке OSs, пока соединение не было закрыто корректно.
IMO имена 'завершение работы' и 'близко' вводят в заблуждение, 'закрывают' и 'уничтожают', подчеркнул бы их различия.
существуют некоторые ароматы завершения работы: http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.shutdown.aspx . *отклоните, подобно.
Вызов close
и shutdown
имеет два различных эффекта на базовый сокет.
первая вещь указать состоит в том, что сокет является ресурсом в базовой ОС и , несколько процессов могут иметь дескриптор для того же базового сокета.
, Когда Вы звоните close
, это постепенно уменьшает количество дескриптора одним и если количество дескриптора достигло нуля тогда сокет и связалось, соединение проходит нормальную близкую процедуру (эффективно отправляющий FIN / EOF одноранговому узлу), и сокет освобожден.
вещь обратить внимание на вот состоит в том, что, если количество дескриптора не достигает нуля, потому что другой процесс все еще имеет дескриптор к сокету тогда, соединение не закрывается, и сокет не освобожден.
, С другой стороны, вызов shutdown
для чтения и записи завершений базовое соединение и отправляет FIN / EOF одноранговому узлу независимо от того, сколько процессов имеет дескрипторы к сокету. Однако это не делает , освобождают сокет, и все еще необходимо звонить близко позже.
Shutdown(1), заставляет сокет больше не отправлять данные
Это полезно для
1- Промывки буфера
2- Обнаружения странных ошибок
3- Безопасной защиты
Позвольте мне объяснить больше, когда вы отправляете данные из A в B, не гарантируется, что они будут отправлены в буфер A os. в B, он гарантированно будет отправлен только в буфер A os, который в свою очередь отправляет его в буфер B os
Таким образом, вызывая shutdown(1) на A, вы промываете буфер A и выдается ошибка если буфер не пуст, т.е. данные еще не были отправлены пиру
Однако это необратимо, так что вы можете сделать это после того, как вы полностью отправили все свои данные и хотите быть уверены, что они, по крайней мере, находятся на пире. os buffer
Разве приведенный выше код не неправильный?
Вызов закрытия сразу после вызова выключения может заставить ядро все равно отбросить все исходящие буферы .
Согласно http://blog.netherlabs.nl/articles/2009/01/18/the-ultimate-so_linger-page-or-why-is-my-tcp-not -reliable между выключением и закрытием необходимо подождать, пока чтение не вернет 0.