ProgrammingThis forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
Hey, this is my first post... yay for me. I've been programming c++ for a couple years now and programming for a little bit longer. Recently, I've been learning out of this book, "Advanced Linux Programming," created by Code Sourcery. Now, it gives an example of creating, using and destroying sockets. I copied the source code completely, I even tried downloading the source code off of their website. But, I get these errors:
Code:
socket-server.cpp: In function `int main(int, char* const*)':
socket-server.cpp:75: cannot convert `sockaddr_un*' to `const sockaddr*' for
argument `2' to `int bind(int, const sockaddr*, unsigned int)'
socket-server.cpp:97: cannot convert `sockaddr_un' to `sockaddr*' for argument
`2' to `int accept(int, sockaddr*, socklen_t*)'
And here's the source code:
Code:
//socket-server.cpp
//Server of socket test
#include <iostream.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/un.h>
// Read text from the socket and print it out.
// Continue until the socket closes. Return
// nonzero if the client sent a "quit" message,
// zero otherwise.
int server(int client_socket)
{
while(1)
{
int length;
char* text;
// First, read the length of the text message
// from the socket. If read returns zero, the
// client closed the connection.
if(read(client_socket, &length, sizeof(length))==0)
{
return 0;
}
// Allocate a buffer to hold the text.
text=(char*)malloc(length);
// Read the text itself, and print it.
read(client_socket, text, length);
cout << text << endl;
// Free the buffer.
free(text);
// If the client sent the message "quit," we're all done.
if(!strcmp(text,"quit"))
{
return 1;
}
}
}
int main(int argc, char* const argv[])
{
const char* const socket_name=argv[1];
int socket_fd;
struct sockaddr_un name;
int client_sent_quit_message;
// Create the socket.
socket_fd=socket(PF_LOCAL, SOCK_STREAM, 0);
// Indicate that this is a server.
name.sun_family=AF_LOCAL;
strcpy(name.sun_path, socket_name);
bind(socket_fd,&name, SUN_LEN(&name));
// Listen for connections.
listen(socket_fd, 5);
// Repeatedly accept connections,
// spinning off one server() to deal with each
// client. Continue until a client sends a "quit"
// message.
do
{
struct sockaddr_un client_name;
socklen_t client_name_len;
int client_socket_fd;
// Accept a connection.
client_socket_fd=accept(socket_fd, client_name, &client_name_len);
// Handle the connection.
client_sent_quit_message=server(client_socket_fd);
// Close our end of the connection.
close(client_socket_fd);
}while(!client_sent_quit_message);
// Remove the socket file.
close(socket_fd);
unlink(socket_name);
return 0;
}
I get a segmenation fault when I attempt to compile it.
Oh, and sorry it took so long to reply, I ended up ripping up the carpet in my room t'day. Turns out theres some pretty good wood floor down there. Anyhoo, I actually get segmentation faults for a couple programs I attempt to run. Might this problem be in how I execute it, how I compile it?
I generally compile using: c++ x.cpp -o x. and then i run it by doing ./x in terminal. That right?
When these lines execute, the length variable isn't assigned a value yet! So length will contain a random value. That probably the cause of segfaulting. I suppose it is not like this in the original code from the book.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.