Próbuję napisać (w języku C#) oprogramowanie, które komunikuje się z innym oprogramowaniem, zbudowanym z MSYS, przez emulowane (emulowane przez MSYS) gniazda domeny Unix. Nauczyłem się, że „serwer gniazdo” (nie jestem jasne, na co właściwe jest terminologia) tworzy plik tymczasowy o treści jak poniżej:Jaki mechanizm jest używany przez MSYS/Cygwin do emulowania gniazd domeny Unix?
!<socket >59108 282F93E1-9E2D051A-46B57EFC-64A1852F
59108 odpowiada portu TCP, którego "socket server" nasłuchuje na interfejsie pętli zwrotnej. Za pomocą narzędzia do przechwytywania pakietów udało mi się ustalić, że "klient gniazda" łączy się z tym portem, a informacje są wymieniane za pośrednictwem interfejsu pętli zwrotnej.
Powieliłem to zachowanie w moim oprogramowaniu, a "klient gniazda" łączy się z moim portem nasłuchującym, ale żadne informacje nie są przesyłane. Sądzę, że jest tu jeszcze jeden krok, jeden prawdopodobnie obejmujący GUID w pliku "socket", ale nie byłem w stanie określić, co to jest. Co muszę zrobić, aby uruchomić komunikację od klienta?
Wygląda na to, że MSYS używa mechanizmu Cygwin, który wiąże się z nazwanym wydarzeniem, czyli (prawdopodobnie?) Stworzonym przez "serwer" i sygnalizowanym (podobno) przez "serwer", ale moją naiwną próbą wdrożenia wydaje się nie działać.
Znalazłem an email written by Conrad Scott, który opisuje różne niedociągnięcia w procesie "uzgadniania" i proponuje łatę, która rzekomo rozwiązuje je. W tym e-mailu Conrad opisuje nieco używany proces, a on wskazuje, że faktycznie są dwa zdarzenia, jeden zarządzany przez "serwer" i jeden zarządzany przez "klienta". Użyłem API Monitor do wyszukiwania wywołań CreateEvent(), a gdy jest ich kilka, nie mogę znaleźć takiego, który wygląda jak "dymiący pistolet" tutaj. Nie ma też interesujących wywołań CreateSemaphore(), więc wygląda na to, że łatka Conrada nigdy nie została zastosowana (lub przynajmniej została zastosowana jakiś czas po rozwidleniu CYSZA przez MSYSa).
JFYI: Tak jest również w przypadku MSYS, mój serwer gniazd (agent SSH) działa zarówno dla klientów ssh/rsync MSMS cygwin, jak i MSYS. – divB