- Dprintf("bind swift socket");
- return bind(s->socketListener,
- (const struct sockaddr *)&s->socketListenerAddr,
- sizeof(s->socketListenerAddr));
+ struct sockaddr s_other;
+ socklen_t slen=sizeof(s_other);
+ ssize_t rec = -1, send;
+ char *command = "test";
+ struct listsockaddr lsa;
+ int i, channel;
+
+ transformFromSwiftToAddr(&lsa, *from);
+ Dprintf("create recv channel\n");
+ // TODO make pool
+ if (s->usedChannels < s->maxChannels)
+ {
+ channel = s->usedChannels++;
+ CHECK(s->recvChannel[channel] = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP));
+
+ for ( i = 0 ; i < lsa.N ; i++)
+ {
+ Dprintf("send information to %s:%d\n", inet_ntoa(lsa.sa[i].sin_addr), ntohs(lsa.sa[i].sin_port));
+ send = sendto(s->recvChannel[channel], command, 4, 0, (const struct sockaddr *)&lsa.sa[i], sizeof(lsa.sa[i]));
+ }
+
+ Dprintf("receive data\n");
+ // TODO make a non-blocant select
+ // I'm waiting for response
+ rec = recvfrom(s->recvChannel[channel], buf, len, flags, (struct sockaddr * __restrict__)&s_other, &slen);
+
+ close(s->recvChannel[channel]);
+ s->usedChannels--;
+ }
+ return rec;