Code:
#include <stdio.h>
#include <string.h>
#include <winsock.h>
int main( int argc, char *argv[] )
{
char buf[128];
int i,
s;
struct sockaddr_in server;
WSADATA wsa;
if( WSAStartup( MAKEWORD( 1, 1 ), &wsa ) ) {
perror( "Startup" );
return 1;
}
struct hostent *h;
if( argc != 4 ) {
fprintf( stderr, "Usage: ./prog server user password\n" );
return 1;
}
if( ( h = gethostbyname( argv[1] ) ) == NULL ) {
perror( "gethostbyaddr" );
return 1;
}
server.sin_addr = *( struct in_addr* )h->h_addr_list[0];
server.sin_port = htons( 110 );
server.sin_family = AF_INET;
s = socket( AF_INET, SOCK_STREAM, 0 );
if( s < 0 ) {
perror( "socket" );
return 1;
}
if( connect( s, ( struct sockaddr* )&server, sizeof( struct sockaddr )
) < 0 ) {
perror( "connect" );
return 1;
}
sprintf( buf, "USER %s\r\n", argv[2] );
if( send( s, buf, strlen( buf ), 0 ) == -1 ) {
perror( "send" ), closesocket( s );
return 1;
}
if( ( i = recv( s, buf, 128, 0 ) ) == -1 ) {
perror( "recv" ), closesocket( s );
return 1;
}
if( strncmp( buf, "+OK", 3 ) != 0 ) {
buf[i] = 0;
fprintf( stderr, "``%s''\n", buf ), closesocket( s );
return 1; }
sprintf( buf, "PASS %s\r\n", argv[3] );
if( send( s, buf, strlen( buf ), 0 ) == -1 ) {
perror( "send" ), closesocket( s );
return 1;
}
if( ( i = recv( s, buf, 128, 0 ) ) == -1 ) {
perror( "recv" );
return 1;
}
if( strncmp( buf, "+OK", 3 ) != 0 ) {
buf[i] = 0;
fprintf( stderr, "``%s''\n", buf );
}
for( i = 1; ; ++i ) {
sprintf( buf, "DELE %d\r\n", i );
if( send( s, buf, strlen( buf ), 0 ) == -1 ) {
perror( "Sending DELE" );
closesocket( s );
return 1;
}
if( recv( s, buf, 128, 0 ) == -1 ) {
perror( "Waiting for DELE answer" );
closesocket( s );
return 1;
}
if( strncmp( buf, "+OK", 3 ) != 0 )
break;
}
send( s, "QUIT\r\n", 6, 0 );
closesocket( s );
puts( "Done." );
return 0;
}
--------------------Configuration: popdel32 - Win32 Debug--------------------