IPSec - Destination/Peer down - sockets haengen

Jan 'RedBully' Seiffert redbully at cc.hs-owl.de
Fri Jun 19 20:36:26 CEST 2009


Florian Lohoff wrote:
> On Thu, Jun 18, 2009 at 07:25:44PM +0200, Jan 'RedBully' Seiffert wrote:
>> Im connect fall fuer datagram sockets wird schon mehr gemacht.
>> Er konntrolliert denke ich die Route (fuer ENETUNREACH). Und er alloziert einen
>> Port (noetig fuer ungebundene Sockets) auf dem interface (connect(2): EAGAIN -
>> No more free local ports or ...).
> 
> Port wird bei einem "bind" allokiert 
> 
> 	socket
> 	bind
> 	connect
> 
> ist der vorgang - Connect macht bei TCP sockets den verbindungsaufbau,
> bei Datagram sockets nur das speichern der adresse ...
> 

NACK.
Du musst bei connect() kein bind() machen. Du kannst eins machen wenn du eine
ganz spezielle "Ausgangsaddresse" haben moechtest. Sonst wuerdest du meist eh
nur INADDR_ANY uebergeben, das ist so sinnvoll wie ein Eimer Diskettenfett.
Du musst bind() machen wenn du accept() machen moechtest.

> Und die routingtabelle duerfte er GAR nicht angucken -

Wieso darf er das nicht?
Wenn ein System keine default route hat kann so sofort bestimmt werden ob die
Packete ueberhaupt ankommen koennen. Auch bei Datagram sockets. Ist doch
logisch, du sagst: "Ich will dahin verbunden werden", er sagt dir gleich: "Dahin
kann ich nicht verbinden".

[snip]
>> -v
>> Tod im Sinne von kill/Prozess ende oder Tod im Sinne von haengt?
> 
> Die haengen alle die prozesse - Ich kann die alle prima mit kill -9 killen
> aber named, ping/fping von mon haengen, munin connection attempts haengen
> 
>> Bei ersterem ist die Frage was das ausloest.
>> Letzteres ist nur programmatisch zu loesen in dem man allen Programmen beibringt
>>  nicht ewig zu blocken damit die Ausfuehrung nicht zum Stillstand kommt
>> (nonblocking-multiplexing, fuer connect & tcp mag das noch gehen, fuer
>> send/sendto ist das bei datagram sockets kontraproduktiv, denn du moechtest
>> meist keine partiellen/fragmentierten Datagramme schicken).
> 
> Nicht der send/sendto haengt sondern der connect -

Ja, dem connect() kannst du mit non-blocking und multiplexing bei kommen.
Nach dem connect() nur wieder auf blocking bei udp schalten, sonnst kommt da
meist Packetmuell bei rum.

> und das auf datagram sockets - voelliger bullshit ...

Es ist sowieso bullshit datagramm sockets zu connecten...

> 
> Flo
Gruss
	Jan

-- 
Networking? That is for fishermen.



More information about the Linux mailing list