functions for network I/O
More...
#include <sys/types.h>
#include <time.h>
Go to the source code of this file.
Detailed Description
functions for network I/O
Enumeration Type Documentation
- Enumerator:
| shutdown_clean |
do a normal shutdown and notice the partner about the shutdown
|
| shutdown_abort |
do hard abort of connection
|
Function Documentation
check if there is data ready to be read without blocking
- Return values:
-
| 0 | if no data |
| 1 | if data |
| -1 | on error |
shutdown the connection and end the program
- Parameters:
-
| sd_type | specifies the way the shutdown should be performed |
This is a forward declaration only, every program has to implement this function in a way that matches how it works.
A shutdown_clean shutdown is e.g. sending QUIT to the server and waiting for it's reply. A shutdown with shutdown_abort is e.g. hard dropping of the connection if the client sends spam and has a broken SMTP engine that does not react to error codes.
Calling this function even before the connection was established is fine.
read one line from the network
- Return values:
-
| 0 | on success |
| -1 | on error (errno is set) |
does not return on timeout, programm will be cancelled
read a given number of bytes from network as binary data (i.e. without any mangling)
- Parameters:
-
| num | number of bytes to read |
| buf | buffer to store data (must have enough space for (num + 1) bytes) |
- Returns:
- number of bytes read
- Return values:
-
read up to a given number of bytes from network but stop at the first CRLF
- Parameters:
-
| num | number of bytes to read, must be < 1002 so everything behind the CRLF can be copied back to lineinn |
| buf | buffer to store data (must have enough space) |
- Returns:
- number of bytes read
- Return values:
-
The trailing CRLF sequence is kept in the buffer. This function will return an error if it detects a bare CR or LF in the middle of the input data, but it cannot detect if the CR goes in one call and LF in the next, so it will allow the output to be just LF or to end in CR.
write multiple lines to the network
- Parameters:
-
| s | array of strings to send |
- Return values:
-
| 0 | on success |
| -1 | on error (errno is set) |
This combines all given strings into one buffer and send them out to the network. This allows the underlying network stack to use the least sensible number of packets, reducing network latency. If memory allocation fails for the intermediate buffer the lines may be send in smaller chunks, which is less efficient but is no other loss in functionality.
Does not return on timeout, programm will be cancelled.
If one part or multiple consecutive parts covers a whole SMTP line this line must conform to the SMTP line length limit (512 bytes).
write one line to the network, fold if needed
- Parameters:
-
| s | array of strings to send |
- Return values:
-
| 0 | on success |
| -1 | on error (errno is set) |
does not return on timeout, programm will be cancelled
- Warning:
- s[0] must be short enough to fit completely into the buffer
-
every s[] must not have a sequence longer then 506 characters without a space (' ') in them
| int netnwrite |
( |
const char * |
s, |
|
|
const size_t |
l |
|
) |
| |
write one line to the network
- Parameters:
-
| s | line to be written (nothing else it written so it should contain CRLF) |
| l | length of s |
- Return values:
-
| 0 | on success |
| -1 | on error (errno is set) |
does not return on timeout, programm will be cancelled
write one line to the network
- Parameters:
-
| s | line to be written (nothing else it written so it should contain CRLF) |
- Return values:
-
| 0 | on success |
| -1 | on error (errno is set) |
-does not return on timeout, programm will be cancelled -same as net_write but expects that line is <= 512 characters and includes CRLF
Variable Documentation
buffer for the line to read: max 1000 chars including CRLF, leading extra '.', closing '\0'
the descriptor where messages to network are written to
how long to wait for data