Sockets and File Descriptors
Clash Royale CLAN TAG#URR8PPP
up vote
0
down vote
favorite
As far as I have seen, a socket creates 3 file descriptors in the /proc//fd folder, STDIN, STDOUT and STDERR.
When I input in one socket, it should out the other socket, in a raw-TCP connection, but the thing is, when I echo
the STDIN it doesn't output the string.
I attach a photo:
I expect to see the output in the listenning socket, but I don't. Thank you
socket file-descriptors
add a comment |Â
up vote
0
down vote
favorite
As far as I have seen, a socket creates 3 file descriptors in the /proc//fd folder, STDIN, STDOUT and STDERR.
When I input in one socket, it should out the other socket, in a raw-TCP connection, but the thing is, when I echo
the STDIN it doesn't output the string.
I attach a photo:
I expect to see the output in the listenning socket, but I don't. Thank you
socket file-descriptors
add a comment |Â
up vote
0
down vote
favorite
up vote
0
down vote
favorite
As far as I have seen, a socket creates 3 file descriptors in the /proc//fd folder, STDIN, STDOUT and STDERR.
When I input in one socket, it should out the other socket, in a raw-TCP connection, but the thing is, when I echo
the STDIN it doesn't output the string.
I attach a photo:
I expect to see the output in the listenning socket, but I don't. Thank you
socket file-descriptors
As far as I have seen, a socket creates 3 file descriptors in the /proc//fd folder, STDIN, STDOUT and STDERR.
When I input in one socket, it should out the other socket, in a raw-TCP connection, but the thing is, when I echo
the STDIN it doesn't output the string.
I attach a photo:
I expect to see the output in the listenning socket, but I don't. Thank you
socket file-descriptors
asked Apr 11 at 8:10
aDoN
2862515
2862515
add a comment |Â
add a comment |Â
1 Answer
1
active
oldest
votes
up vote
3
down vote
Opening a socket opens a socket, which is what you see listed as file descriptor 3 in your output (socket:[5474494]
). The other three file descriptors are the standard input, output and error descriptors, which are opened by default for any process. In your case, these point to the terminal where the program is running, which is why âÂÂsurniâ shows up there when you write to the file descriptor.
To write to the socket, you need to use appropriate mechanisms, such as netcat
in the other direction:
echo Hello | nc localhost 9999
or, if youâÂÂre using Bash:
echo Hello > /dev/tcp/localhost/9999
However it appears you already have a connection established to port 9999 using another netcat
, so that wonâÂÂt actually work in your case. You need to use the established connection...
If youâÂÂre expecting a long-running nc
to provide a way for other processes to feed into the socket, you need to set that up e.g. using a FIFO:
mkfifo socket-input
nc localhost 9999 < socket-input
echo Hello > socket-input
Hello, good answer, I send data in a TCP socket via/dev/tcp/
but this abstracts the layers I want to interact with which are the file descriptors of a socket. Another question, do you know how to bind a process to a socket so that I can send data via the socket? I want to use this since I can't send data to the STDIN of a process (for Linux /proc/<pid>/fd/ descriptors are just symlinks to a terminal)
â aDoN
Apr 11 at 13:19
Why do you want to interact with the file descriptors? Those are effectively meaningless outside their owning process. I explained how to make a socket available externally, see the last part of my answer.
â Stephen Kitt
Apr 11 at 13:32
But once the connection is established, you can't feed into the socket with another process, can you? I don't know exacly what is the difference of what you achieve when creating a file with mkfifo
â aDoN
Apr 11 at 14:23
what you said is a big thing "file descriptors are meaningless outside their owning process" And you seem to be right, but how can you explain this command:strace -p<pid> -s9999 -e write
that spy other processes and see the input and output of a process? (nano, vi, python interctive shell...., every process)
â aDoN
Apr 11 at 14:28
strace
uses ptrace to spy on other processes, it gets help from the kernel to view things from inside the target process.
â Stephen Kitt
Apr 11 at 14:44
 |Â
show 2 more comments
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
3
down vote
Opening a socket opens a socket, which is what you see listed as file descriptor 3 in your output (socket:[5474494]
). The other three file descriptors are the standard input, output and error descriptors, which are opened by default for any process. In your case, these point to the terminal where the program is running, which is why âÂÂsurniâ shows up there when you write to the file descriptor.
To write to the socket, you need to use appropriate mechanisms, such as netcat
in the other direction:
echo Hello | nc localhost 9999
or, if youâÂÂre using Bash:
echo Hello > /dev/tcp/localhost/9999
However it appears you already have a connection established to port 9999 using another netcat
, so that wonâÂÂt actually work in your case. You need to use the established connection...
If youâÂÂre expecting a long-running nc
to provide a way for other processes to feed into the socket, you need to set that up e.g. using a FIFO:
mkfifo socket-input
nc localhost 9999 < socket-input
echo Hello > socket-input
Hello, good answer, I send data in a TCP socket via/dev/tcp/
but this abstracts the layers I want to interact with which are the file descriptors of a socket. Another question, do you know how to bind a process to a socket so that I can send data via the socket? I want to use this since I can't send data to the STDIN of a process (for Linux /proc/<pid>/fd/ descriptors are just symlinks to a terminal)
â aDoN
Apr 11 at 13:19
Why do you want to interact with the file descriptors? Those are effectively meaningless outside their owning process. I explained how to make a socket available externally, see the last part of my answer.
â Stephen Kitt
Apr 11 at 13:32
But once the connection is established, you can't feed into the socket with another process, can you? I don't know exacly what is the difference of what you achieve when creating a file with mkfifo
â aDoN
Apr 11 at 14:23
what you said is a big thing "file descriptors are meaningless outside their owning process" And you seem to be right, but how can you explain this command:strace -p<pid> -s9999 -e write
that spy other processes and see the input and output of a process? (nano, vi, python interctive shell...., every process)
â aDoN
Apr 11 at 14:28
strace
uses ptrace to spy on other processes, it gets help from the kernel to view things from inside the target process.
â Stephen Kitt
Apr 11 at 14:44
 |Â
show 2 more comments
up vote
3
down vote
Opening a socket opens a socket, which is what you see listed as file descriptor 3 in your output (socket:[5474494]
). The other three file descriptors are the standard input, output and error descriptors, which are opened by default for any process. In your case, these point to the terminal where the program is running, which is why âÂÂsurniâ shows up there when you write to the file descriptor.
To write to the socket, you need to use appropriate mechanisms, such as netcat
in the other direction:
echo Hello | nc localhost 9999
or, if youâÂÂre using Bash:
echo Hello > /dev/tcp/localhost/9999
However it appears you already have a connection established to port 9999 using another netcat
, so that wonâÂÂt actually work in your case. You need to use the established connection...
If youâÂÂre expecting a long-running nc
to provide a way for other processes to feed into the socket, you need to set that up e.g. using a FIFO:
mkfifo socket-input
nc localhost 9999 < socket-input
echo Hello > socket-input
Hello, good answer, I send data in a TCP socket via/dev/tcp/
but this abstracts the layers I want to interact with which are the file descriptors of a socket. Another question, do you know how to bind a process to a socket so that I can send data via the socket? I want to use this since I can't send data to the STDIN of a process (for Linux /proc/<pid>/fd/ descriptors are just symlinks to a terminal)
â aDoN
Apr 11 at 13:19
Why do you want to interact with the file descriptors? Those are effectively meaningless outside their owning process. I explained how to make a socket available externally, see the last part of my answer.
â Stephen Kitt
Apr 11 at 13:32
But once the connection is established, you can't feed into the socket with another process, can you? I don't know exacly what is the difference of what you achieve when creating a file with mkfifo
â aDoN
Apr 11 at 14:23
what you said is a big thing "file descriptors are meaningless outside their owning process" And you seem to be right, but how can you explain this command:strace -p<pid> -s9999 -e write
that spy other processes and see the input and output of a process? (nano, vi, python interctive shell...., every process)
â aDoN
Apr 11 at 14:28
strace
uses ptrace to spy on other processes, it gets help from the kernel to view things from inside the target process.
â Stephen Kitt
Apr 11 at 14:44
 |Â
show 2 more comments
up vote
3
down vote
up vote
3
down vote
Opening a socket opens a socket, which is what you see listed as file descriptor 3 in your output (socket:[5474494]
). The other three file descriptors are the standard input, output and error descriptors, which are opened by default for any process. In your case, these point to the terminal where the program is running, which is why âÂÂsurniâ shows up there when you write to the file descriptor.
To write to the socket, you need to use appropriate mechanisms, such as netcat
in the other direction:
echo Hello | nc localhost 9999
or, if youâÂÂre using Bash:
echo Hello > /dev/tcp/localhost/9999
However it appears you already have a connection established to port 9999 using another netcat
, so that wonâÂÂt actually work in your case. You need to use the established connection...
If youâÂÂre expecting a long-running nc
to provide a way for other processes to feed into the socket, you need to set that up e.g. using a FIFO:
mkfifo socket-input
nc localhost 9999 < socket-input
echo Hello > socket-input
Opening a socket opens a socket, which is what you see listed as file descriptor 3 in your output (socket:[5474494]
). The other three file descriptors are the standard input, output and error descriptors, which are opened by default for any process. In your case, these point to the terminal where the program is running, which is why âÂÂsurniâ shows up there when you write to the file descriptor.
To write to the socket, you need to use appropriate mechanisms, such as netcat
in the other direction:
echo Hello | nc localhost 9999
or, if youâÂÂre using Bash:
echo Hello > /dev/tcp/localhost/9999
However it appears you already have a connection established to port 9999 using another netcat
, so that wonâÂÂt actually work in your case. You need to use the established connection...
If youâÂÂre expecting a long-running nc
to provide a way for other processes to feed into the socket, you need to set that up e.g. using a FIFO:
mkfifo socket-input
nc localhost 9999 < socket-input
echo Hello > socket-input
edited Apr 11 at 8:34
answered Apr 11 at 8:22
Stephen Kitt
140k22305365
140k22305365
Hello, good answer, I send data in a TCP socket via/dev/tcp/
but this abstracts the layers I want to interact with which are the file descriptors of a socket. Another question, do you know how to bind a process to a socket so that I can send data via the socket? I want to use this since I can't send data to the STDIN of a process (for Linux /proc/<pid>/fd/ descriptors are just symlinks to a terminal)
â aDoN
Apr 11 at 13:19
Why do you want to interact with the file descriptors? Those are effectively meaningless outside their owning process. I explained how to make a socket available externally, see the last part of my answer.
â Stephen Kitt
Apr 11 at 13:32
But once the connection is established, you can't feed into the socket with another process, can you? I don't know exacly what is the difference of what you achieve when creating a file with mkfifo
â aDoN
Apr 11 at 14:23
what you said is a big thing "file descriptors are meaningless outside their owning process" And you seem to be right, but how can you explain this command:strace -p<pid> -s9999 -e write
that spy other processes and see the input and output of a process? (nano, vi, python interctive shell...., every process)
â aDoN
Apr 11 at 14:28
strace
uses ptrace to spy on other processes, it gets help from the kernel to view things from inside the target process.
â Stephen Kitt
Apr 11 at 14:44
 |Â
show 2 more comments
Hello, good answer, I send data in a TCP socket via/dev/tcp/
but this abstracts the layers I want to interact with which are the file descriptors of a socket. Another question, do you know how to bind a process to a socket so that I can send data via the socket? I want to use this since I can't send data to the STDIN of a process (for Linux /proc/<pid>/fd/ descriptors are just symlinks to a terminal)
â aDoN
Apr 11 at 13:19
Why do you want to interact with the file descriptors? Those are effectively meaningless outside their owning process. I explained how to make a socket available externally, see the last part of my answer.
â Stephen Kitt
Apr 11 at 13:32
But once the connection is established, you can't feed into the socket with another process, can you? I don't know exacly what is the difference of what you achieve when creating a file with mkfifo
â aDoN
Apr 11 at 14:23
what you said is a big thing "file descriptors are meaningless outside their owning process" And you seem to be right, but how can you explain this command:strace -p<pid> -s9999 -e write
that spy other processes and see the input and output of a process? (nano, vi, python interctive shell...., every process)
â aDoN
Apr 11 at 14:28
strace
uses ptrace to spy on other processes, it gets help from the kernel to view things from inside the target process.
â Stephen Kitt
Apr 11 at 14:44
Hello, good answer, I send data in a TCP socket via
/dev/tcp/
but this abstracts the layers I want to interact with which are the file descriptors of a socket. Another question, do you know how to bind a process to a socket so that I can send data via the socket? I want to use this since I can't send data to the STDIN of a process (for Linux /proc/<pid>/fd/ descriptors are just symlinks to a terminal)â aDoN
Apr 11 at 13:19
Hello, good answer, I send data in a TCP socket via
/dev/tcp/
but this abstracts the layers I want to interact with which are the file descriptors of a socket. Another question, do you know how to bind a process to a socket so that I can send data via the socket? I want to use this since I can't send data to the STDIN of a process (for Linux /proc/<pid>/fd/ descriptors are just symlinks to a terminal)â aDoN
Apr 11 at 13:19
Why do you want to interact with the file descriptors? Those are effectively meaningless outside their owning process. I explained how to make a socket available externally, see the last part of my answer.
â Stephen Kitt
Apr 11 at 13:32
Why do you want to interact with the file descriptors? Those are effectively meaningless outside their owning process. I explained how to make a socket available externally, see the last part of my answer.
â Stephen Kitt
Apr 11 at 13:32
But once the connection is established, you can't feed into the socket with another process, can you? I don't know exacly what is the difference of what you achieve when creating a file with mkfifo
â aDoN
Apr 11 at 14:23
But once the connection is established, you can't feed into the socket with another process, can you? I don't know exacly what is the difference of what you achieve when creating a file with mkfifo
â aDoN
Apr 11 at 14:23
what you said is a big thing "file descriptors are meaningless outside their owning process" And you seem to be right, but how can you explain this command:
strace -p<pid> -s9999 -e write
that spy other processes and see the input and output of a process? (nano, vi, python interctive shell...., every process)â aDoN
Apr 11 at 14:28
what you said is a big thing "file descriptors are meaningless outside their owning process" And you seem to be right, but how can you explain this command:
strace -p<pid> -s9999 -e write
that spy other processes and see the input and output of a process? (nano, vi, python interctive shell...., every process)â aDoN
Apr 11 at 14:28
strace
uses ptrace to spy on other processes, it gets help from the kernel to view things from inside the target process.â Stephen Kitt
Apr 11 at 14:44
strace
uses ptrace to spy on other processes, it gets help from the kernel to view things from inside the target process.â Stephen Kitt
Apr 11 at 14:44
 |Â
show 2 more comments
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f436945%2fsockets-and-file-descriptors%23new-answer', 'question_page');
);
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password