Skip navigation.
 
mlRe: Distributed Objects and Leopard issue
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>

Related mailsAuthorDate
mlDistributed Objects and Leopard issue Allan Dushan Nov 27, 00:26
mlRe: Distributed Objects and Leopard issue Aurélien Hugelé Nov 27, 13:16
mlRe: Distributed Objects and Leopard issue Allan Dushan Nov 28, 01:09