мой errno 227 (я думаю), который читает
sendto: не удается назначить запрошенный адрес
Я думаю, что он не может найти широковещательный порт при включении моего vpn, вот пример, когда я включаю свой vpn и выключаю его
2010-06-25 04: 05: 55.022 SwypeSendForMac2 [63687: 6203] записал 187 байт в socked 6
2010-06-25 04: 05: 56.023 SwypeSendForMac2 [63687: 6203] записал 187 байт в socked 6
2010-06-25 04: 05: 57.024 SwypeSendForMac2 [63687: 6203] записал 187 байт в socked 6
sendto: не удается назначить запрошенный адрес
sendto: не удается назначить запрошенный адрес
sendto: не удается назначить запрошенный адрес
sendto: не удается назначить запрошенный адрес
sendto: не удается назначить запрошенный адрес
sendto: не удается назначить запрошенный адрес
sendto: не удается назначить запрошенный адрес
2010-06-25 04: 06: 05.027 SwypeSendForMac2 [63687: 6203] записал 187 байт в socked 6
2010-06-25 04: 06: 06.031 SwypeSendForMac2 [63687: 6203] записал 187 байт в socked 6
середина конечно с vpn на
вот мой маршрутный стол без vpn:
34: ~ samuelw $ netstat -r
Таблицы маршрутизации
Интернет:
Флаги шлюза назначения Ссылки Использовать Netif Expire
по умолчанию 192.168.1.1 UGSc 63 0 en1
127 localhost UCS 0 0 lo0
localhost localhost UH 1 180317 lo0
169.254 ссылка № 5 UCS 1 0 en1
cronos.local ссылка # 5 UHLW 0 1 en1
192.168.1 ссылка № 5 UCS 4 0 en1
192.168.1.1 90: 84: d: d3: e2: 54 UHLWI 69 1260 en1 1123
192.168.1.98 0: 11: 24: a2: 41: 6d UHLWI 0 324 en1 1112
192.168.1.152 0: 21: e9: 76: fe: 6b UHLWI 0 0 en1 657
192.168.1.153 localhost UHS 0 118 lo0
192.168.1.154 0: 21: 5c: 52: e0: 11 UHLWI 1 2662 en1 1134
Internet6:
Флаги шлюза назначения Netif Expire
localhost localhost UH lo0
fe80 ::% lo0 localhost Uc lo0
локальная ссылка № 1 UHL lo0
fe80 ::% en1 ссылка № 5 UC en1
samuelmacbook.loca 0: 1e: c2: a6: 64: 98 UHL lo0
cronos.local 0: 21: 5c: 52: e0: 11 UHLW en1
ff01 :: localhost Um lo0
ff02 :: localhost UmC lo0
ff02 :: ссылка # 5 UmC en1
и с моим vpn
34: ~ samuelw $ netstat -r
Таблицы маршрутизации
Интернет:
Флаги шлюза назначения Ссылки Использовать Netif Expire
по умолчанию 172.16.20.1 UGSc 8 0 ppp0
по умолчанию 192.168.1.1 UGScI 1 0 en1
127 localhost UCS 0 0 lo0
localhost localhost UH 1 180323 lo0
169.254 ссылка № 5 UCS 1 0 en1
cronos.local ссылка # 5 UHLW 0 1 en1
172.16.20.1 34.108.131.216.cli UH 9 0 ppp0
192.168.1 ссылка № 5 UCS 5 0 en1
192.168.1.1 90: 84: d: d3: e2: 54 UHLWI 3 1346 en1 1104
192.168.1.98 0: 11: 24: a2: 41: 6d UHLWI 2 378 en1 1093
192.168.1.152 0: 21: e9: 76: fe: 6b UHLWI 0 0 en1 637
192.168.1.153 localhost UHS 0 118 lo0
192.168.1.154 0: 21: 5c: 52: e0: 11 UHLWI 1 2665 en1 1114
192.168.1.255 ff: ff: ff: ff: ff: ff UHLWbI 0 2 en1
strong-sf1.reliabl 192.168.1.1 UGHS 25 25 en1216.131.108 ppp0 USc 0 0 ppp0
Internet6:
Флаги шлюза назначения Netif Expire
localhost localhost UH lo0
fe80 ::% lo0 localhost Uc lo0
локальная ссылка № 1 UHL lo0
fe80 ::% en1 ссылка № 5 UC en1
samuelmacbook.loca 0: 1e: c2: a6: 64: 98 UHL lo0
cronos.local 0: 21: 5c: 52: e0: 11 UHLW en1
ff01 :: localhost Um lo0
ff02 :: localhost UmC lo0
ff02 :: ссылка # 5 UmC en1
и вот мой код разделен на 2 функции
(интермедиат) StartService
{
широковещательная рассылка = 1;
if ((sockfd = socket (AF_INET, SOCK_DGRAM, 0)) == -1) {
PError ( "розетка");
выход (1);
}
// этот вызов позволяет передавать широковещательные пакеты:
if (setsockopt (sockfd, SOL_SOCKET, SO_BROADCAST, & broadcast,
размер трансляции) == -1) {
perror ("setsockopt (SO_BROADCAST)");
выход (1);
}
its_addr.sin_family = AF_INET; // порядок байтов хоста
its_addr.sin_port = htons (SERVERPORT); // короткий, сетевой порядок байтов
its_addr.sin_addr.s_addr = htonl (INADDR_BROADCAST);
memset (its_addr.sin_zero, '\ 0', sizeof__ddr.sin_zero);
возврат 0;
}
(аннулируются) publishServiceLoop
{
NSAutoreleasePool * autoreleasePool = [[NSAutoreleasePool alloc] init];
NSString * message;
while (живой) {
while ((message = [AdyNetServer encodeToXML: сервер]) == ноль) {
[NSThread sleepForTimeInterval: 3.0];
}
const char * msgString = [сообщение cStringUsingEncoding: NSUTF8StringEncoding];
if ((numbytes = sendto (sockfd, msgString, [длина сообщения], 0,
(struct sockaddr *) & их_аддр, размер их_аддр)) == -1) {
PError ( "SendTo");
if ([[AdyErrorAlerter sharedInstance] делегат]) {
[[[AdyErrorAlerter sharedInstance] делегат] receiveErrorMessage: [NSString stringWithFormat:
@ "невозможно передать на сокет% d с сообщением% @", sockfd, msgString]];
}
}
else {
NSLog(@"wrote %d bytes to socked %d",numbytes,sockfd);
}
//printf("sent %d bytes to %s\n", numbytes,
// inet_ntoa(their_addr.sin_addr));
[NSThread sleepForTimeInterval:1.0];
[autoreleasePool release];
autoreleasePool = [[NSAutoreleasePool alloc] init];
}
[autoreleasePool release];
if (thread! = nil) {
нить = ноль;
[выпуск выпуска];
}
}