![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 16.12.2005 Skąd: Warszawa, Kabaty Ostrzeżenie: (0%) ![]() ![]() |
Cześć,
Piszę w PHP prosty serwer działający po socketach. Schemat działania jest prosty: 1) klient wysyła ciąg znaków z komendą, 2) serwer odbiera ciąg, 3) serwer "myśli" przez kilkanaście-kilkadziesiąt sekund, 4) serwer wysyła odpowiedź, 5) klient odbiera odpowiedź i zamyka połączenie. Sęk w tym, że mielenie w punkcie trzecim może trwać dowolnie długo i klient może w międzyczasie zamknąć połączenie, a odpowiedź zostanie wysłana na zamknięty port. Zgodnie z manualem funkcja socket_write() powinna zwrócić false w przypadku, gdy nie doszło do zapisania. Niestety, nigdy nie zwraca false, nawet jeśli klient w międzyczasie przerwie połączenie. Wymyśliłem obejście z funkcją socket_shutdown, ale to wymusza schemat: jedno połączenie, jedno zapytanie, jedna odpowiedź. Może ktoś ma pomysł co z tym fantem zrobić?
Ten post edytował DzikiLis 4.11.2007, 13:22:21 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
ja tylko mowilem w sprawie polaczenia z klientem
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 16.12.2005 Skąd: Warszawa, Kabaty Ostrzeżenie: (0%) ![]() ![]() |
ja tylko mowilem w sprawie polaczenia z klientem Hm, to klient łączy się z serwerem. Mógłbyś rozwinąć tą myśl? Kod Returns the number of bytes successfully written to the socket or FALSE one error. Tako rzecze manual... a spróbuj var_dumpnąć to, co zwraca socket_write i jakiego typu jest to wartość. Też mnie to właśnie zaciekawiło o0 W obu przypadkach (klient czeka do końca / klient się rozłącza w trakcie) var_dump zwraca int(8), czyli długość ciągu "mielenie". Testowałem połączenie lokalne (klient uruchamiany na tym samym komputerze co serwer), wywołanie z innego serwera z netu i z mojego komputera, który jest za NATem. We wszystkich trzech przypadkach jest to samo. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 7.10.2025 - 22:41 |