Hi there,

I am trying to write a program to send an HTTP request (eventually to view the raw HTML page) but i can't seem to get my requests to send or receive properly, intially when i ran this it would receive about 4190000 bytes (rough guess) but after running it a few times it now receives 0 bytes and i get the following output:

Unable to connect: Socket operation on non-socket
Error sending: Bad file descriptor
Error: Bad file descriptor

It seems strange that it was intially able to send data....... although i may have accidentally edited something.

Any ideas? I'm presuming its my code :(

#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <string.h>
#include <stdio.h>

int main(){

struct addrinfo hints, *res;
int sockfd;

// first, load up address structs with getaddrinfo():

memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;  // use IPv4 or IPv6, whichever
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;     // fill in my IP for me

getaddrinfo("www.example.com", "80", &hints, &res);

// make a socket:

if (sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol) == -1)
	perror("Unable to create socket");

// bind it to the port we passed in to getaddrinfo():

if (connect(sockfd, res->ai_addr, res->ai_addrlen) == -1){
	perror("Unable to connect");

// send request
char *msg = "GET /index.html HTTP/1.1\r\n Host: www.example.com\r\n";
int len, bytes_sent;

len = strlen(msg);
if (bytes_sent = send(sockfd, msg, len, 0) == -1)
	perror("Error sending");

printf(" BYTES SENT.\n");

//recieve response
ssize_t i;
ssize_t rcount;
char buf[1500];

rcount = read(sockfd, buf, 1500);
if (rcount == -1)

printf("%d", rcount);
printf(" BYTES RECIEVED.\n");

for (i = 0; i < rcount; i++){
	printf("%c", buf[i]);

8 Years
Discussion Span
Last Post by xitrum69

Well, the error tells you that it can't create the connection because the socket descriptor is not a socket. Have a look at the possible reasons for that. Perhaps you still have a identical socket floating around in a previous unstopped run?


Please take your time to study curl library (source code) where you can find a simple example to understand how to post a http request with C programming.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.