/*
- * valerie_socket.c -- Client Socket
- * Copyright (C) 2002-2003 Ushodaya Enterprises Limited
+ * mvcp_socket.c -- Client Socket
+ * Copyright (C) 2002-2009 Ushodaya Enterprises Limited
* Author: Charles Yates <charles.yates@pandora.be>
*
* This library is free software; you can redistribute it and/or
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#if !defined(__MINGW32__)
#include <netdb.h>
-#include <sys/types.h>
#include <sys/socket.h>
+#include <netinet/in.h>
+#else
+#include <winsock2.h>
+#endif
+#include <sys/types.h>
#include <fcntl.h>
#include <errno.h>
-#include <netinet/in.h>
#include <sys/time.h>
/* Application header files */
-#include "valerie_socket.h"
+#include "mvcp_socket.h"
/** Initialise the socket.
*/
-valerie_socket valerie_socket_init( char *server, int port )
+mvcp_socket mvcp_socket_init( char *server, int port )
{
- valerie_socket socket = malloc( sizeof( valerie_socket_t ) );
+ mvcp_socket socket = malloc( sizeof( mvcp_socket_t ) );
if ( socket != NULL )
{
- memset( socket, 0, sizeof( valerie_socket_t ) );
+ memset( socket, 0, sizeof( mvcp_socket_t ) );
socket->fd = -1;
socket->server = strdup( server );
socket->port = port;
/** Connect to the server.
*/
-int valerie_socket_connect( valerie_socket connection )
+int mvcp_socket_connect( mvcp_socket connection )
{
int ret = 0;
struct hostent *host;
/** Convenience constructor for a connected file descriptor.
*/
-valerie_socket valerie_socket_init_fd( int fd )
+mvcp_socket mvcp_socket_init_fd( int fd )
{
- valerie_socket socket = malloc( sizeof( valerie_socket_t ) );
+ mvcp_socket socket = malloc( sizeof( mvcp_socket_t ) );
if ( socket != NULL )
{
- memset( socket, 0, sizeof( valerie_socket_t ) );
+ memset( socket, 0, sizeof( mvcp_socket_t ) );
socket->fd = fd;
socket->no_close = 1;
}
/** Read an arbitrarily formatted block of data from the server.
*/
-int valerie_socket_read_data( valerie_socket socket, char *data, int length )
+int mvcp_socket_read_data( mvcp_socket socket, char *data, int length )
{
struct timeval tv = { 1, 0 };
fd_set rfds;
if ( select( socket->fd + 1, &rfds, NULL, NULL, &tv ) )
{
+#if defined(__MINGW32__)
+ used = recv( socket->fd, data, length - 1, 0 );
+#else
used = read( socket->fd, data, length - 1 );
+#endif
if ( used > 0 )
data[ used ] = '\0';
else
/** Write an arbitrarily formatted block of data to the server.
*/
-int valerie_socket_write_data( valerie_socket socket, const char *data, int length )
+int mvcp_socket_write_data( mvcp_socket socket, const char *data, int length )
{
int used = 0;
}
else if ( FD_ISSET( socket->fd, &wfds ) )
{
+#if defined(__MINGW32__)
+ int inc = send( socket->fd, data + used, length - used, 0 );
+#else
int inc = write( socket->fd, data + used, length - used );
+#endif
if ( inc > 0 )
used += inc;
else
/** Close the socket.
*/
-void valerie_socket_close( valerie_socket socket )
+void mvcp_socket_close( mvcp_socket socket )
{
if ( socket->fd > 0 && !socket->no_close )
+#if defined(__MINGW32__)
+ closesocket( socket->fd );
+#else
close( socket->fd );
+#endif
free( socket->server );
free( socket );
}