@@ -161,7 +161,12 @@ static int ipc_connect(int sockfd, struct ipc_msg *msg)
161161 pid_t pid = msg -> pid ;
162162 int rc = -1 ;
163163
164- rc = _connect (pid , payload -> sockfd , & payload -> addr , payload -> addrlen );
164+ struct sockaddr addr ;
165+
166+ addr .sa_family = payload -> addr .sa_family ;
167+ memcpy (addr .sa_data , payload -> addr .sa_data , sizeof (addr .sa_data ));
168+
169+ rc = _connect (pid , payload -> sockfd , & addr , payload -> addrlen );
165170
166171 return ipc_write_rc (sockfd , pid , IPC_CONNECT , rc );
167172}
@@ -272,9 +277,11 @@ static int ipc_getsockopt(int sockfd, struct ipc_msg *msg)
272277 pid_t pid = msg -> pid ;
273278 int rc = -1 ;
274279
275- rc = _getsockopt ( pid , opts -> fd , opts -> level , opts -> optname , opts -> optval , & opts -> optlen ) ;
280+ socklen_t optlen ;
276281
277- int resplen = sizeof (struct ipc_msg ) + sizeof (struct ipc_err ) + sizeof (struct ipc_sockopt ) + opts -> optlen ;
282+ rc = _getsockopt (pid , opts -> fd , opts -> level , opts -> optname , opts -> optval , & optlen );
283+
284+ int resplen = sizeof (struct ipc_msg ) + sizeof (struct ipc_err ) + sizeof (struct ipc_sockopt ) + optlen ;
278285 struct ipc_msg * response = alloca (resplen );
279286
280287 if (response == NULL ) {
@@ -302,8 +309,8 @@ static int ipc_getsockopt(int sockfd, struct ipc_msg *msg)
302309 optres -> fd = opts -> fd ;
303310 optres -> level = opts -> level ;
304311 optres -> optname = opts -> optname ;
305- optres -> optlen = opts -> optlen ;
306- memcpy (& optres -> optval , opts -> optval , opts -> optlen );
312+ optres -> optlen = optlen ;
313+ memcpy (& optres -> optval , opts -> optval , optlen );
307314
308315 if (ipc_try_send (sockfd , (char * )response , resplen ) == -1 ) {
309316 perror ("Error on writing IPC getsockopt response" );
@@ -497,6 +504,8 @@ static int ipc_recvmsg(int sockfd, struct ipc_msg *msg)
497504 error -> rc = rc < 0 ? -1 : rc ;
498505 error -> err = rc < 0 ? - rc : 0 ;
499506
507+ printf ("IPC recvmsg sending %d bytes\n" , resplen );
508+
500509 if (ipc_try_send (sockfd , (char * )response , resplen ) == -1 ) {
501510 perror ("Error on writing IPC recvmsg response" );
502511 }
0 commit comments