PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Solaris 5.9/5.10 und Unix Sockets.


SimonX
2008-10-06, 20:01:08
Hi,

Unter Solaris scheint ein Unix-Socket nie als STREAM zu arbeiten.

Der Socket wurde mit socket(AF_UNIX, SOCK_STREAM, 0) geöffnet, aber wenn man von ihm liest bekommt man immer nur eine Message.

Hier ein "system-call-trace"


17.4521 0.0003 pollsys(0x100181114, 9, 0xFFFFFFFF7FFFE4F0, 0x00000000) = 8
17.4522 0.0001 read(9, " 0 0 1\t 0 0 0 0 0 1 0 0".., 65535) = 10092
17.4525 0.0003 read(9, 0xFFFFFFFF7FFEE430, 65535) Err#11 EAGAIN
17.4527 0.0002 read(10, " 0 0 1\t 0 0 0 0 0 1 0 0".., 65535) = 10090
17.4530 0.0003 read(10, " 0 0 1\t 0 0 0 0 0 1 0 0".., 65535) = 10088
17.4532 0.0002 read(10, " 0 0 1\t 0 0 0 0 0 1 0 0".., 65535) = 10091
17.4534 0.0002 read(10, 0xFFFFFFFF7FFEE430, 65535) Err#11 EAGAIN
17.4535 0.0001 read(11, " 0 0 1\t 0 0 0 0 0 1 0 0".., 65535) = 10092
17.4537 0.0002 read(11, 0xFFFFFFFF7FFEE430, 65535) Err#11 EAGAIN
17.4539 0.0002 read(12, " 0 0 1\t 0 0 0 0 0 1 0 0".., 65535) = 10090
17.4541 0.0002 read(12, " 0 0 1\t 0 0 0 0 0 1 0 0".., 65535) = 10090
17.4543 0.0002 read(12, 0xFFFFFFFF7FFEE430, 65535) Err#11 EAGAIN
17.4545 0.0002 read(13, " 0 0 1\t 0 0 0 0 0 1 0 0".., 65535) = 10090
17.4547 0.0002 read(13, " 0 0 1\t 0 0 0 0 0 1 0 0".., 65535) = 10088
17.4558 0.0011 read(13, " 0 0 1\t 0 0 0 0 0 1 0 0".., 65535) = 10091
17.4560 0.0002 read(13, 0xFFFFFFFF7FFEE430, 65535) Err#11 EAGAIN
17.4561 0.0001 read(14, " 0 0 1\t 0 0 0 0 0 1 0 0".., 65535) = 10095
17.4563 0.0002 read(14, " 0 0 1\t 0 0 0 0 0 1 0 0".., 65535) = 10095
17.4564 0.0001 read(14, " 0 0 1\t 0 0 0 0 0 1 0 0".., 65535) = 10093
17.4566 0.0002 read(14, 0xFFFFFFFF7FFEE430, 65535) Err#11 EAGAIN
17.4567 0.0001 read(15, " 0 0 1\t 0 0 0 0 0 1 0 0".., 65535) = 10092
17.4572 0.0005 read(15, " 0 0 1\t 0 0 0 0 0 1 0 0".., 65535) = 10094
17.4575 0.0003 read(15, " 0 0 1\t 0 0 0 0 0 1 0 0".., 65535) = 10093
17.4577 0.0002 read(15, " 0 0 1\t 0 0 0 0 0 1 0 0".., 65535) = 10094
17.4582 0.0005 read(15, 0xFFFFFFFF7FFEE430, 65535) Err#11 EAGAIN
17.4583 0.0001 read(16, " 0 0 1\t 0 0 0 0 0 1 0 0".., 65535) = 10091
17.4585 0.0002 read(16, " 0 0 1\t 0 0 0 0 0 1 0 0".., 65535) = 10092
17.4586 0.0001 read(16, " 0 0 1\t 0 0 0 0 0 1 0 0".., 65535) = 10092
17.4589 0.0003 read(16, " 0 0 1\t 0 0 0 0 0 1 0 0".., 65535) = 10092
17.4591 0.0002 read(16, 0xFFFFFFFF7FFEE430, 65535) Err#11 EAGAIN


Extra um zu sehen, warum ich immer nur eine Message von read() bekomme habe ich es in eine Schleife getan. Man sieht, das das read() mehrfach auf verschiedenen Sockets wiederholt werden kann ohne das es blockiert.

Hat jemand eine Idee was man da machen kann? Send/Receive Buffer habe ich schon auf beiden Seiten auf 128k gesetzt, aber ohne erfolg.

Ich werde auch mal AF_INET probieren, nur das die Port-Nummernvergabe blöd und umständlich ist.