Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.03.30;
Скачать: CL | DM;

Вниз

много подключений с одного сокета   Найти похожие ветки 

 
tippa ©   (2010-04-25 18:47) [0]

Можно ли для одного сокета вызывать функцию 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));
Если в первый раз подключение прошло удачно - то во второй раз всегда ошибка. Получается, что при каждом новом подключении нужно пересоздавать сокет - как-то некрасиво получается?


 
DVM ©   (2010-04-25 19:05) [1]


> Получается, что при каждом новом подключении нужно пересоздавать
> сокет - как-то некрасиво получается?

нормально.


 
Anatoly Podgoretsky ©   (2010-04-25 19:29) [2]

> tippa  (25.04.2010 18:47:00)  [0]

А ты как думал.


 
tippa ©   (2010-04-25 19:44) [3]

Нас по физике так учили - мол все должно быть красиво. Вот и здесь думаю было бы красивее создать сокет при старте и до конца с ним работать - не сработало)


 
Anatoly Podgoretsky ©   (2010-04-25 20:28) [4]

> tippa  (25.04.2010 19:44:03)  [3]

Сработало, только ты пытаешься в один сокет втиснуть несколько.


 
RC   (2010-04-26 06:30) [5]

DisconnectEx + TF_REUSE_SOCKET


 
DVM ©   (2010-04-26 11:16) [6]

http://forum.sources.ru/index.php?showtopic=295714


 
RC   (2010-04-26 11:47) [7]

2 DVM

Там, по ссылке, вроде как какие-то проблемы с ней, которые так и не решили? Я DisconnectEx с TF_REUSE_SOCKET вполне успешно использовал на сервере, есть там кое-какие тонкости, но не смертельные. Выгода от неё на клиенте сомнительна, и я не пробовал, но MSDN прямо утверждает, что DisconnectEx + TF_REUSE_SOCKET можно использовать в паре с ConnectEx, прямо в описании и сказано.


 
bwwebm   (2010-04-27 13:06) [8]

А если изменить опцию 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;



Страницы: 1 вся ветка

Текущий архив: 2014.03.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
15-1381010039
картман
2013-10-06 01:53
2014.03.30
спорт


2-1371586268
vbh
2013-06-19 00:11
2014.03.30
Динамические компонеты


15-1381233183
RWolf
2013-10-08 15:53
2014.03.30
Визуализация результатов измерений


15-1381177802
Юрий
2013-10-08 00:30
2014.03.30
С днем рождения ! 8 октября 2013 вторник


2-1371650235
bergenion
2013-06-19 17:57
2014.03.30
Помогите создать класс