put NULL in it after it).
This is because the socket passed to handlers is one of their argument (=>
not writable).
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@149
48e7efb5-ca39-0410-a469-
dd3cf9ba447f
them all up in one shot)
[DataDesc]
- Fix the ugly case of reference to dynamic array.
them all up in one shot)
[DataDesc]
- Fix the ugly case of reference to dynamic array.
+ [Transport]
+ - gras_socket_close now expect the socket to close (and not its address to
+ put NULL in it after it). This is because the socket passed to handlers
+ is one of their argument (=> not writable).
/* OUT */ gras_socket_t **dst);
gras_error_t gras_socket_server(unsigned short port,
/* OUT */ gras_socket_t **dst);
/* OUT */ gras_socket_t **dst);
gras_error_t gras_socket_server(unsigned short port,
/* OUT */ gras_socket_t **dst);
-void gras_socket_close(gras_socket_t **sd);
+void gras_socket_close(gras_socket_t *sd);
/* get information about socket */
int gras_socket_my_port (gras_socket_t *sock);
/* get information about socket */
int gras_socket_my_port (gras_socket_t *sock);
-void gras_socket_close(gras_socket_t **sock) {
+void gras_socket_close(gras_socket_t *sock) {
gras_socket_t *sock_iter;
int cursor;
/* FIXME: Issue an event when the socket is closed */
gras_socket_t *sock_iter;
int cursor;
/* FIXME: Issue an event when the socket is closed */
gras_dynar_foreach(_gras_trp_sockets,cursor,sock_iter) {
gras_dynar_foreach(_gras_trp_sockets,cursor,sock_iter) {
- if (*sock == sock_iter) {
+ if (sock == sock_iter) {
gras_dynar_cursor_rm(_gras_trp_sockets,&cursor);
gras_dynar_cursor_rm(_gras_trp_sockets,&cursor);
- if ( (*sock)->plugin->socket_close)
- (* (*sock)->plugin->socket_close)(*sock);
+ if ( sock->plugin->socket_close)
+ (* sock->plugin->socket_close)(sock);
- free(*sock);
- *sock=NULL;
tmp_errno = errno;
if(sd == -1) {
tmp_errno = errno;
if(sd == -1) {
- gras_socket_close(&sock);
+ gras_socket_close(sock);
RAISE1(system_error,
"Accept failed (%s). Droping server socket.", strerror(tmp_errno));
} else {
RAISE1(system_error,
"Accept failed (%s). Droping server socket.", strerror(tmp_errno));
} else {
//GRAS_LOG_NEW_DEFAULT_CATEGORY(test);
int main(int argc,char *argv[]) {
//GRAS_LOG_NEW_DEFAULT_CATEGORY(test);
int main(int argc,char *argv[]) {
gras_error_t errcode;
char data_send[256];
gras_error_t errcode;
char data_send[256];
TRYFAIL(gras_trp_chunk_send(sock,data_send, sizeof(data_send)));
fprintf(stderr,"===[CLIENT]=== Exiting successfully\n");
TRYFAIL(gras_trp_chunk_send(sock,data_send, sizeof(data_send)));
fprintf(stderr,"===[CLIENT]=== Exiting successfully\n");
- gras_socket_close(&sock);
+ gras_socket_close(sock);
fprintf(stderr,"===[SERVER]=== Got '%s'.\n", data_recv);
fprintf(stderr,"===[SERVER]=== Exiting successfully\n");
fprintf(stderr,"===[SERVER]=== Got '%s'.\n", data_recv);
fprintf(stderr,"===[SERVER]=== Exiting successfully\n");
- gras_socket_close(&sock);
+ gras_socket_close(sock);
fprintf(stderr,"===[CLIENT]=== Got a valid ACK\n");
fprintf(stderr,"===[CLIENT]=== Exiting successfully\n");
fprintf(stderr,"===[CLIENT]=== Got a valid ACK\n");
fprintf(stderr,"===[CLIENT]=== Exiting successfully\n");
- gras_socket_close(&sock);
+ gras_socket_close(sock);
TRYFAIL(gras_trp_chunk_recv(conn,data_recv, sizeof(data_recv)));
fprintf(stderr,"===[SERVER]=== Got '%s'. Send it back.\n", data_recv);
TRYFAIL(gras_trp_chunk_send(conn,data_recv, sizeof(data_recv)));
TRYFAIL(gras_trp_chunk_recv(conn,data_recv, sizeof(data_recv)));
fprintf(stderr,"===[SERVER]=== Got '%s'. Send it back.\n", data_recv);
TRYFAIL(gras_trp_chunk_send(conn,data_recv, sizeof(data_recv)));
- gras_socket_close(&conn);
+ gras_socket_close(conn);
fprintf(stderr,"===[SERVER]=== Exiting successfully\n");
fprintf(stderr,"===[SERVER]=== Exiting successfully\n");
- gras_socket_close(&sock);
+ gras_socket_close(sock);