sock_set_nonblocking_mode(sock, session->nonblocking);
- debug_print("session: connected\n");
+ debug_print("session (%p): connected\n", session);
session->state = SESSION_RECV;
session->io_tag = sock_add_watch(session->sock, G_IO_IN,
g_return_if_fail(session != NULL);
g_return_if_fail(session->destroy != NULL);
- debug_print("session: session_destroy()\n");
-
session_close(session);
session->destroy(session);
g_free(session->server);
g_byte_array_free(session->read_data_buf, TRUE);
g_free(session->read_data_terminator);
g_free(session->write_buf);
+
+ debug_print("session (%p): destroyed\n", session);
+
g_free(session);
}
+gboolean session_is_connected(Session *session)
+{
+ return (session->state == SESSION_READY ||
+ session->state == SESSION_SEND ||
+ session->state == SESSION_RECV);
+}
+
void session_set_recv_message_notify(Session *session,
RecvMsgNotify notify_func, gpointer data)
{
{
g_return_val_if_fail(session != NULL, -1);
- debug_print("session_close\n");
-
if (session->conn_id > 0) {
sock_connect_async_cancel(session->conn_id);
session->conn_id = 0;
session->state = SESSION_DISCONNECTED;
}
+ debug_print("session (%p): closed\n", session);
+
return 0;
}
read_len = sock_read(session->sock, session->read_buf,
SESSION_BUFFSIZE - 1);
+ if (read_len == 0) {
+ g_warning("sock_read: received EOF\n");
+ session->state = SESSION_EOF;
+ return FALSE;
+ }
+
if (read_len < 0) {
switch (errno) {
case EAGAIN:
read_len = sock_read(session->sock, session->read_buf,
SESSION_BUFFSIZE);
+ if (read_len == 0) {
+ g_warning("sock_read: received EOF\n");
+ session->state = SESSION_EOF;
+ return FALSE;
+ }
+
if (read_len < 0) {
switch (errno) {
case EAGAIN: