Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
https://docs.microsoft.com/en-us/windows/desktop/api/winsock/nf-winsock-wsaasyncselect
int WSAAsyncSelect(
SOCKET s,
HWND hWnd,
u_int wMsg,
long lEvent
);
/*
hWnd
A handle that identifies the window that will receive a message when a network event occurs.
*/
Почему виндовые асинхронные (или правильно говорить "небликирующиеся") сокеты так черезжопно сделаны? Нафига им через HWND надо месседжи слать? Что, другого способа нет для оповещений?
Требовать для работы асинхронных сокетов чтоб какое-то окно было это как требовать зубную щетку для входа в туалет чтоб посрать
> Нафига им через HWND надо месседжи слать?
Лул, я задался этим же вопросом, когда впервые столкнулся с этой функцией. Ещё где-то накопал то ли особый класс окна, то ли функцию, которая создаёт окошко, у которого нет окошка, но есть hwnd.
Это растёт, скорее всего, из тех дремучих времён, когда формочки получали месседжи от своих детей и в своём wndproc в огромном свитче всех их обрабатывали. Нужно получить пару байт из сети? Просто сделай свитч побольше.
> Что, другого способа нет для оповещений?
IOCP, он же в кишках boost::asio.
@Лул, я задался этим же вопросом, когда впервые столкнулся с этой функцией. Ещё где-то накопал то ли особый класс окна, то ли функцию, которая создаёт окошко, у которого нет окошка, но есть hwnd.
В делфях она зовётся AllocateHwnd. Создаётся скрытое окошко 0x0, с классом TPUtilWindow.
@Это растёт, скорее всего, из тех дремучих времён, когда формочки получали месседжи от своих детей и в своём wndproc в огромном свитче всех их обрабатывали.
Дескриптор окна упаковывается в какую-то структуру:
//
// Store the specified window handle, message, and event mask in
// the socket information structure.
//
socket->AsyncSelecthWnd = hWnd;
socket->AsyncSelectwMsg = wMsg;
socket->AsyncSelectlEvent = lEvent;
socket->DisabledAsyncSelectEvents = 0;
А ведь получились противоположные подходы:
1. В Винде для работы асинхронных сокетов нужны окна.
2. В X-Window для работы окон нужны сокеты.
Кстати, даже у server core гуйню не отпилили.
Лул, я задался этим же вопросом, когда впервые столкнулся с этой функцией. Ещё где-то накопал то ли особый класс окна, то ли функцию, которая создаёт окошко, у которого нет окошка, но есть hwnd.
Это растёт, скорее всего, из тех дремучих времён, когда формочки получали месседжи от своих детей и в своём wndproc в огромном свитче всех их обрабатывали. Нужно получить пару байт из сети? Просто сделай свитч побольше.
> Что, другого способа нет для оповещений?
IOCP, он же в кишках boost::asio.
В делфях она зовётся AllocateHwnd. Создаётся скрытое окошко 0x0, с классом TPUtilWindow.
@Это растёт, скорее всего, из тех дремучих времён, когда формочки получали месседжи от своих детей и в своём wndproc в огромном свитче всех их обрабатывали.
А что, сейчас разве что-то изменилось?
Она делегирует действия WSPAsyncSelect.