![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
много подключений с одного сокета
tippa © (2010-04-25 18:47:00)Можно ли для одного сокета вызывать функцию connect несколько раз. Пока получается так, что при повторном вызове connect всегда возвращается ошибка. Создаю сокет, заполняю протокол, порт, адрес, подключаюсь:
TCP_sock:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
addr.sin_family:=AF_INET;
addr.sin_port:=htons(port1);
addr.sin_addr.S_addr := inet_addr(pchar(ip1));
connect(TCP_sock, @addr, sizeof(addr));
Затем меняю порт и адрес
addr.sin_port:=htons(port2);
addr.sin_addr.S_addr := inet_addr(pchar(ip2));
и снова подключаюсь
connect(TCP_sock, @addr, sizeof(addr));
Если в первый раз подключение прошло удачно - то во второй раз всегда ошибка. Получается, что при каждом новом подключении нужно пересоздавать сокет - как-то некрасиво получается?
bwwebm (2010-04-27 13:06:00) [1]А если изменить опцию SO_REUSEADDR сокета:
var
bOpt: Bool;
...
bOpt:=True;
if setsockopt(hSocket, SOL_SOCKET, SO_REUSEADDR, @bOpt, SizeOf(Bool)) <> 0 then begin
ShowMessage('opt error');
Exit;
end;
RC (2010-04-26 11:47:00) [2]2 DVM
Там, по ссылке, вроде как какие-то проблемы с ней, которые так и не решили? Я DisconnectEx с TF_REUSE_SOCKET вполне успешно использовал на сервере, есть там кое-какие тонкости, но не смертельные. Выгода от неё на клиенте сомнительна, и я не пробовал, но MSDN прямо утверждает, что DisconnectEx + TF_REUSE_SOCKET можно использовать в паре с ConnectEx, прямо в описании и сказано.
DVM (2010-04-26 11:16:00) [3]http://forum.sources.ru/index.php?showtopic=295714
RC (2010-04-26 06:30:00) [4]DisconnectEx + TF_REUSE_SOCKET
Anatoly Podgoretsky (2010-04-25 20:28:00) [5]> tippa (25.04.2010 19:44:03) [3]
Сработало, только ты пытаешься в один сокет втиснуть несколько.
tippa (2010-04-25 19:44:00) [6]Нас по физике так учили - мол все должно быть красиво. Вот и здесь думаю было бы красивее создать сокет при старте и до конца с ним работать - не сработало)
Anatoly Podgoretsky (2010-04-25 19:29:00) [7]> tippa (25.04.2010 18:47:00) [0]
А ты как думал.
DVM (2010-04-25 19:05:00) [8]
> Получается, что при каждом новом подключении нужно пересоздавать
> сокет - как-то некрасиво получается?
нормально.