2009-11-12 16 views
5

Patrząc na asynchroniczną rozdzielczość adresu w winsock wydaje się, że jedynymi dwiema opcjami są: blokowanie gethostbyname w osobnym wątku lub użycie WSAAsyncGetHostByName. Ta ostatnia została zaprojektowana z jakiegoś powodu do pracy z wiadomościami w oknie, zamiast nakładających się operacji i portów/procedur ukończenia.Asynchroniczna rozdzielczość adresu w winsock?

Czy istnieje jakaś wersja gethostbyname, która działa asynchronicznie z nakładającymi się operacjami w podobny sposób do reszty interfejsu API systemu winsock?

+1

"Jakiś powód" to został zaprojektowany w ten sposób, że Winsock został stworzony w świecie Win16, gdzie nie było wątków ani programów w trybie konsolowym (były programy DOS, ale nie miały one dostępu do Winsock, z wyjątkiem oszustwa.) Wszystkie programy Windows miały GUI lub przynajmniej pętla komunikatów, dzięki której system operacyjny poinformował program o tym, co się wydarzyło. Powiadomienie o zakończeniu wyszukiwania nazw t ten mechanizm ma sens w tym świecie. –

Odpowiedz

1

Niestety, nie ma nakładającej się wersji gethostbyname().

3

Niestety nie ma go obecnie, chociaż GetAddrInfoEx() ma miejsce na wszystkie właściwe rzeczy do operacji asynchronicznej za pośrednictwem wszystkich "zwykłych" tras (w tym IOCP), więc spodziewam się, że ostatecznie ... Niestety, na tym czas, doktorzy mówią, że wszystkie te muszą być ustawione na NULL i są oznaczone jako "zarezerwowane". :(

Mam zamiar napisać jeden (już od jakiegoś czasu) ... To niefortunne, że WSAAsyncGetHostByName nie pozwala nawet na równoczesne rozpoznawanie nazw, więc jest całkiem bezużyteczne jako baza dla tego, czego chcę, ale , to znowu, ponieważ nie obsługuje IPv6, co sprawia, że ​​jest dla mnie bezużyteczna, i oczekuję, że zacznę od zera, ewentualnie używając czegoś w rodzaju bazy this (piwo)

+0

Uwaga, druga biblioteka, do której prowadzi link, jest na licencji GPL. –

+0

Dobre miejsce Warren. Nie posunąłem się jeszcze do tego. Zrobiłem tylko google ostatniej nocy. –