Sponsored Content
Top Forums Programming TCP/IP, how to verify delivery? Post 302415915 by DreamWarrior on Friday 23rd of April 2010 05:05:16 PM
Old 04-23-2010
TCP/IP, how to verify delivery?

When I successfully write data to a TCP/IP socket, as I understand it, I am only guaranteed the data gets to the TCP/IP stack's buffer. However, a successful write doesn't guarantee that the data actually gets to the recipient. Since data can linger in the TCP/IP stack's buffer "indefinately," it is quite possible that the TCP/IP socket be closed before the buffered data is ever delivered.

Of course, since the recipient's side is also buffered, I realize the sender's TCP/IP stack can successfully flush its buffer, presumably meaning it entered the recipient's buffer, but the recipient never actually has to read it. The recipient's failure to read the data will, long term, cause their buffer to fill. As their buffer fills the packets will be acked in such a way to cause the sender's TCP/IP window reduce until, ultimately, the recipient's buffer fills entirely and the sending stack is blocked. At which point, since the sending stack can't flush, the sender's buffer will fill up, which will then cause subsequent writes, to a blocking socket, to block or, to a non-blocking socket, to return -1 setting errno to EAGAIN.

So...I suppose that's a long way of saying that buffering in the two TCP stacks make it hard to figure out, just by a successful call to write, whether or not the data written actually got to the recipient. Further, without an acknowledgment from the recipient, knowing the data was actually read is impossible. This leads me to my question.

Assuming I can't have the recipient acknowledge the response (protocol limitation), the best I could presume to do is verify the data got to the recipient's TCP/IP buffer. Since the two TCP/IP stacks will ack the packets under the hood, checking the sender's TCP buffer capacity should be sufficient to tell me how much data has been undelivered. If this is true, is there any good way to accomplish it? I ask because, given I can't modify the protocol to contain an acknowledgement, knowing the data got to the recipient's buffer is superior to "well, I stuck it the TCP/IP buffer (write succeeded), it must have got there."

The O/S is AIX 5.3 if it matters. Also, feel free to correct any misunderstandings I may have about the process.

Thanks!
 

8 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Mail delivery confirmation

If I am sending mail with this command: mail .......@whatever.com < filename, is it possible to get delivery confirmation? Thanks (3 Replies)
Discussion started by: CSGUY
3 Replies

2. UNIX for Advanced & Expert Users

Delivery Failure notice when aliase has added

Hi Team, Mails are coming proper on my server. But when i added a sendmail(/etc/mail/aliases) alias to redirect mails to a script, Its started giving delivery failure for the same id. Can you tell me what can be the possible reason for this?and how can we sort it out. Its very urgent for me... (3 Replies)
Discussion started by: mindtee_abhi
3 Replies

3. AIX

Issues on email delivery

Hello, there is a problem when using sendmail to certain destinations, basically the recipient will reject the incoming message because the user@local.domain.com is used as the sender (Return-Path), they would verify local.domain.com is not a valid DNS record which is true because it is a local... (11 Replies)
Discussion started by: neil_is_ere
11 Replies

4. UNIX for Dummies Questions & Answers

sendmail weird Local Delivery Problem

Hi Guys, Just joined the forum though I have been lurking here for many years now. Wondering if anyone can help me out with a problem that I'm currently having. :wall: I have a few servers that are relaying all email off of the box to an exchange server. There is a SmartHost configured in... (7 Replies)
Discussion started by: PACETREE
7 Replies

5. Solaris

Too much TCP retransmitted and TCP duplicate on server Oracle Solaris 10

I have problem with oracle solaris 10 running on oracle sparc T4-2 server. Os information: 5.10 Generic_150400-03 sun4v sparc sun4v Output from tcpstat.d script TCP bytes: out outRetrans in inDup inUnorder 6833763 7300 98884 0... (2 Replies)
Discussion started by: insatiable1610
2 Replies

6. Shell Programming and Scripting

Smtp dual delivery script

Hello Peoples, I have a problem wrapping my head around a script that I modified, essentially it uses the postfix smtp line in master.cf to send out a message to two or more email servers, It is a nice way to test different email servers and platforms. Problem with the original script is that it... (0 Replies)
Discussion started by: SeSe
0 Replies

7. IP Networking

DNS config preventing mail delivery

Hi Please can you help on this: the Net Admins decided to use DNS to resolve names, so this is preventing mail being delivered when using commands like date | mailx -s "test" abc.xyz@asdf.xx.yy. What we were asked was to edit /etc/resolv.confand add 3 entries, in all servers (10 Replies)
Discussion started by: fretagi
10 Replies

8. UNIX and Linux Applications

Qmail mail delivery problem

Dear Concern, As per below article, we have configured qmail in our system. THE LINUX STUFF: qmail Installation Steps on Linux But when we try to send any mail in own domain, got below error message. Please advise. Apr 17 17:01:20 BLAUDITSCPTEST sendmail: alias database /etc/aliases... (0 Replies)
Discussion started by: makauser
0 Replies
SMTP-SOURCE(1)						      General Commands Manual						    SMTP-SOURCE(1)

NAME
smtp-source - multi-threaded SMTP/LMTP test generator SYNOPSIS
smtp-source [options] [inet:]host[:port] smtp-source [options] unix:pathname DESCRIPTION
smtp-source connects to the named host and TCP port (default: port 25) and sends one or more messages to it, either sequentially or in par- allel. The program speaks either SMTP (default) or LMTP. Connections can be made to UNIX-domain and IPv4 or IPv6 servers. IPv4 and IPv6 are the default. Note: this is an unsupported test program. No attempt is made to maintain compatibility between successive versions. Arguments: -4 Connect to the server with IPv4. This option has no effect when Postfix is built without IPv6 support. -6 Connect to the server with IPv6. This option is not available when Postfix is built without IPv6 support. -A Don't abort when the server sends something other than the expected positive reply code. -c Display a running counter that is incremented each time an SMTP DATA command completes. -C count When a host sends RESET instead of SYN|ACK, try count times before giving up. The default count is 1. Specify a larger count in order to work around a problem with TCP/IP stacks that send RESET when the listen queue is full. -d Don't disconnect after sending a message; send the next message over the same connection. -f from Use the specified sender address (default: <foo@myhostname>). -F file Send the pre-formatted message header and body in the specified file, while prepending '.' before lines that begin with '.', and while appending CRLF after each line. -l length Send length bytes as message payload. The length does not include message headers. -L Speak LMTP rather than SMTP. -m message_count Send the specified number of messages (default: 1). -M myhostname Use the specified hostname or [address] in the HELO command and in the default sender and recipient addresses, instead of the machine hostname. -N Prepend a non-repeating sequence number to each recipient address. This avoids the artificial 100% hit rate in the resolve and re- write client caches and exercises the trivial-rewrite daemon, better approximating Postfix performance under real-life work-loads. -o Old mode: don't send HELO, and don't send message headers. -r recipient_count Send the specified number of recipients per transaction (default: 1). Recipient names are generated by prepending a number to the recipient address. -R interval Wait for a random period of time 0 <= n <= interval between messages. Suspending one thread does not affect other delivery threads. -s session_count Run the specified number of SMTP sessions in parallel (default: 1). -S subject Send mail with the named subject line (default: none). -t to Use the specified recipient address (default: <foo@myhostname>). -T windowsize Override the default TCP window size. To work around broken TCP window scaling implementations, specify a value > 0 and < 65536. -v Make the program more verbose, for debugging purposes. -w interval Wait a fixed time between messages. Suspending one thread does not affect other delivery threads. [inet:]host[:port] Connect via TCP to host host, port port. The default port is smtp. unix:pathname Connect to the UNIX-domain socket at pathname. BUGS
No SMTP command pipelining support. SEE ALSO
smtp-sink(1), SMTP/LMTP message dump LICENSE
The Secure Mailer license must be distributed with this software. AUTHOR(S) Wietse Venema IBM T.J. Watson Research P.O. Box 704 Yorktown Heights, NY 10598, USA SMTP-SOURCE(1)
All times are GMT -4. The time now is 05:56 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy