FROM : Aurélien Hugelé
DATE : Tue Nov 27 13:16:08 2007
> receivePort = [[[NSSocketPort alloc] initWithProtocolFamily:PF_INET
>
> socketType:SOCK_STREAM
>
> protocol:0
>
> socket:sockfd] autorelease];
Is incorrect
use
receivePort = [[NSSocketPort alloc] initWithProtocolFamily:PF_INET
socketType:SOCK_STREAM protocol:IPPROTO_TCP socket:sockfd];
instead. Note that protocol is not the same :)
This fixed my problems on Leopard... Tiger was much more tolerant to
this...
Aurélien,
Objective Decision Team
On 27 nov. 07, at 00:26, Allan Dushan wrote:
> Does anyone have a workaround for the code below? This code worked
> great pre-Leopard.
>
> In order to get the server/client to work I had to switch the server
> code below to the single call:
>
> receivePort = [[NSSocketPort alloc] initWithTCPPort:8000];
>
> This allows the client to connect, but no longer allows me to modify
> the socket. The important modification is SO_REUSEADDR. Since I
> cannot do this anymore, if the user quits/force quits the
> applications, they have to wait 2+ minutes before restarting the
> application in order for the port to be available again.
>
> Using the current code below, the client can connect, and get the
> root proxy, but when you try to make a call to the root proxy an
> exception is thrown.
>
> Is this a bug in Leopard, or do I need to set things up another way
> with leopard?
>
> One last note, if the client is running on an OS that is pre-Leopard
> and the server is on Leopard, the connection works. The problem
> occurs when both are running on Leopard.
>
> Allan
>
>
>
> Server side:
> ----------------
>
> sockfd = socket(AF_INET, SOCK_STREAM, 0);
>
> memset(&serverAddress, 0, sizeof(serverAddress));
> serverAddress.sin_family = AF_INET;
> serverAddress.sin_addr.s_addr = htonl(INADDR_ANY); //need big-endian
> byte order
> serverAddress.sin_port = htons(8000);
>
> fcntl( sockfd, F_SETFD, 1 );
> setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof(flag));
> timeToWait.tv_sec = 30; // Timeout after n seconds...
> timeToWait.tv_usec = 0;
> setsockopt(sockfd, SOL_SOCKET, SO_SNDTIMEO, &timeToWait,
> sizeof(timeToWait));
> setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &timeToWait,
> sizeof(timeToWait));
> bind(sockfd, (struct sockaddr *)&serverAddress, namelen);
> listen(sockfd, 10);
>
> receivePort = [[[NSSocketPort alloc] initWithProtocolFamily:PF_INET
>
> socketType:SOCK_STREAM
>
> protocol:0
>
> socket:sockfd] autorelease];
>
> theConnection = [[NSConnection alloc]
> initWithReceivePort:receivePort sendPort:nil];
>
> [theConnection setRootObject:self];
>
>
> Client side:
> ---------------
>
> sendPort = [[[NSSocketPort alloc] initRemoteWithTCPPort:8000
> host:hostName] autorelease];
> remoteConnection = [[NSConnection alloc] initWithReceivePort:nil
> sendPort:sendPort];
> remoteServerMgr = [remoteConnection rootProxy];
> [remoteServerMgr doSomething];
> _______________________________________________
>
> Cocoa-dev mailing list (<email_removed>)
>
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/cocoa-dev/hugele.<email_removed>
>
> This email sent to hugele.<email_removed>
DATE : Tue Nov 27 13:16:08 2007
> receivePort = [[[NSSocketPort alloc] initWithProtocolFamily:PF_INET
>
> socketType:SOCK_STREAM
>
> protocol:0
>
> socket:sockfd] autorelease];
Is incorrect
use
receivePort = [[NSSocketPort alloc] initWithProtocolFamily:PF_INET
socketType:SOCK_STREAM protocol:IPPROTO_TCP socket:sockfd];
instead. Note that protocol is not the same :)
This fixed my problems on Leopard... Tiger was much more tolerant to
this...
Aurélien,
Objective Decision Team
On 27 nov. 07, at 00:26, Allan Dushan wrote:
> Does anyone have a workaround for the code below? This code worked
> great pre-Leopard.
>
> In order to get the server/client to work I had to switch the server
> code below to the single call:
>
> receivePort = [[NSSocketPort alloc] initWithTCPPort:8000];
>
> This allows the client to connect, but no longer allows me to modify
> the socket. The important modification is SO_REUSEADDR. Since I
> cannot do this anymore, if the user quits/force quits the
> applications, they have to wait 2+ minutes before restarting the
> application in order for the port to be available again.
>
> Using the current code below, the client can connect, and get the
> root proxy, but when you try to make a call to the root proxy an
> exception is thrown.
>
> Is this a bug in Leopard, or do I need to set things up another way
> with leopard?
>
> One last note, if the client is running on an OS that is pre-Leopard
> and the server is on Leopard, the connection works. The problem
> occurs when both are running on Leopard.
>
> Allan
>
>
>
> Server side:
> ----------------
>
> sockfd = socket(AF_INET, SOCK_STREAM, 0);
>
> memset(&serverAddress, 0, sizeof(serverAddress));
> serverAddress.sin_family = AF_INET;
> serverAddress.sin_addr.s_addr = htonl(INADDR_ANY); //need big-endian
> byte order
> serverAddress.sin_port = htons(8000);
>
> fcntl( sockfd, F_SETFD, 1 );
> setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof(flag));
> timeToWait.tv_sec = 30; // Timeout after n seconds...
> timeToWait.tv_usec = 0;
> setsockopt(sockfd, SOL_SOCKET, SO_SNDTIMEO, &timeToWait,
> sizeof(timeToWait));
> setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &timeToWait,
> sizeof(timeToWait));
> bind(sockfd, (struct sockaddr *)&serverAddress, namelen);
> listen(sockfd, 10);
>
> receivePort = [[[NSSocketPort alloc] initWithProtocolFamily:PF_INET
>
> socketType:SOCK_STREAM
>
> protocol:0
>
> socket:sockfd] autorelease];
>
> theConnection = [[NSConnection alloc]
> initWithReceivePort:receivePort sendPort:nil];
>
> [theConnection setRootObject:self];
>
>
> Client side:
> ---------------
>
> sendPort = [[[NSSocketPort alloc] initRemoteWithTCPPort:8000
> host:hostName] autorelease];
> remoteConnection = [[NSConnection alloc] initWithReceivePort:nil
> sendPort:sendPort];
> remoteServerMgr = [remoteConnection rootProxy];
> [remoteServerMgr doSomething];
> _______________________________________________
>
> Cocoa-dev mailing list (<email_removed>)
>
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/cocoa-dev/hugele.<email_removed>
>
> This email sent to hugele.<email_removed>
| Related mails | Author | Date |
|---|---|---|
| Allan Dushan | Nov 27, 00:26 | |
| Aurélien Hugelé | Nov 27, 13:16 | |
| Allan Dushan | Nov 28, 01:09 |






Cocoa mail archive

