- gras_error_t (*chunk_send)(gras_socket_t *sd,
- char *data,
- size_t size);
- gras_error_t (*chunk_recv)(gras_socket_t *sd,
- char *Data,
- size_t size);
-
- void *specific;
- void (*free_specific)(void *);
+ /* send/recv may be buffered */
+ void (*send)(gras_socket_t sd,
+ const char *data,
+ unsigned long int size,
+ int stable /* storage will survive until flush*/);
+ int (*recv)(gras_socket_t sd,
+ char *data,
+ unsigned long int size);
+ /* raw_send/raw_recv is never buffered (use it for measurement stuff) */
+ void (*raw_send)(gras_socket_t sd,
+ const char *data,
+ unsigned long int size);
+ int (*raw_recv)(gras_socket_t sd,
+ char *data,
+ unsigned long int size);
+
+ /* flush has to make sure that the pending communications are achieved */
+ void (*flush)(gras_socket_t sd);
+
+ void *data; /* plugin-specific data */
+
+ /* exit is responsible for freeing data and telling the OS this plugin goes */
+ /* exit=NULL, data gets freed. (ie exit function needed only when data contains pointers) */
+ void (*exit)(gras_trp_plugin_t);