-
123321 (17.05.11 19:38) [0]Здравствуйте!
Сразу приведу конфигурацию: Delphi 2007, Windows XP SP2.
Проблема заключается в том, что при создании сервера (код приведен ниже) на функции bind программа не отдает управление, и даже через диспетчер задач процесс невозможно завершить, сервер крутится в отдельном потоке. Вопрос, сталкивался ли кто с таким и почему такое может происходить?
Такое происходит не всегда, какой-либо закономерности нет, параметры порта и т.д. всегда корректны.
addr.sin_family:=AF_INET;
addr.sin_port:=htons(Fport);
addr.sin_addr:=in_addr(htonl(INADDR_ANY));
sock_ser:=socket(AF_INET, Sock_stream, 0);
if sock_ser<0 then begin
...
end
else begin
err:=bind(sock_ser,addr,sizeof(addr)); //вот здесь не отдает управление
if err<0 then begin
...
end;
err:=listen(sock_ser, 1);
if err<0 then begin
...
end; -
Palladin © (17.05.11 22:24) [1]addr.sin_family:=AF_INET;
addr.sin_port:=htons(Fport);
addr.sin_addr:=in_addr(htonl(INADDR_ANY));
sock_ser:=socket(AF_INET, Sock_stream, 0);
if sock_ser<0 then begin
...
end
else begin
err:=bind(sock_ser,addr,sizeof(addr)); //вот здесь не отдает управление, уверен?
if err<0 then begin
...
end;
err:=listen(sock_ser, 1);
if err<0 then begin
...
end; -
Rouse_ © (17.05.11 22:39) [2]Сделай асинхронку, и выставь SO_REUSEADDR при ошибке
-
123321 (18.05.11 16:39) [3]Palladin, уверен, отладчиком проходил.
> Сделай асинхронку, и выставь SO_REUSEADDR при ошибке
ассинхронку попробую, но мне желательно делать через блокирующие сокеты.
SO_REUSEADDR попробую, о результатах позднее отпишусь.