AIX calling WINSOCK during e-mail - normal?

Thread Tools Search this Thread
Top Forums Programming AIX calling WINSOCK during e-mail - normal?
# 1  
Old 01-20-2011
AIX calling WINSOCK during e-mail - normal?

Hey everyone,

I'm completely stumped on this. An AIX machine I'm working on is attempting to send email, but the SMTP connection is failing. I have no idea what this code does or if it should even work. If someone could give me a hand, or a suggestion on what else to use, I would appreciate it.

retval = connect (the_socket, (struct sockaddr *) & sa_in,
                     sizeof(struct sockaddr_in));

I cannot debug this - when I step into connect() it appears to step-over.
    IN SOCKET s,
    __in_bcount(namelen) const struct sockaddr FAR * name,
    IN int namelen

# 2  
Old 01-20-2011
I would try printing the value of "errno" to find out why the socket didnt connect.
I would also have a look at "the_socket" to make sure it is >= 0.
Then I would also look at the contents of sa_in (which should be a struct sockaddr_in)
My guess from the WINSOCK comment is that this is a ported windows application. As such I believe they can be different in the way that the sa_in is formed (intel is little endian and power is big endian, so for example a missing "htons" on the port or something like that could make a difference on only one platform)

I hope this helps...
This User Gave Thanks to citaylor For This Post:
# 3  
Old 01-20-2011
Ok, I'll do that. I know the_socket was 19. Do you know of another way I can use this data to connect to an SMTP server? Gives me an errno of 78

Last edited by ctote; 01-20-2011 at 04:14 PM..
# 4  
Old 01-20-2011
None of that winsock stuff matters unless INCL_WINSOCK_API_PROTOTYPES is defined -- it's probably safe to ignore. Windows does in fact have a socket API that vaguely resembles the expected standard, so the code could have been ported as citaylor noted...

After it fails you can try perror("connection failed"); and it should print something like connection failed: no route to host or whatever to stderr.

connect() is usually a system call, not a function, meaning there's nothing happening inside your process to trace during connect() -- it's asleep. Some special instruction or software interrupt has transferred control to the kernel, which will wake it back up when its done.

For more detail on the connect call, try man 2 connect

---------- Post updated at 02:22 PM ---------- Previous update was at 02:06 PM ----------

I found this example for Linux, I think it should at be very close.

Here it is cleaned up and simplified a little.
    const char *host="";
    short int port=25; // standard smtp port
    int sockfd, n;
    struct sockaddr_in serv_addr;
    struct hostent *server;

    sockfd=socket(AF_INET, SOCK_STREAM, 0);
    server=gethostbyname(host); // look up host's IP address

    // copy the IP address and port into the address structure
    memset(&serv_addr, 0, sizeof(serv_addr));
    bcopy(server->h_addr,&serv_addr.sin_addr.s_addr, server->h_length);
    serv_addr.sin_port=htons(port); // htons() puts it in the right byte order
    connect(sockfd, &serv_addr, sizeof(serv_addr));

This User Gave Thanks to Corona688 For This Post:
# 5  
Old 01-20-2011
Amazing. Thanks for the help! I'm sure I'll have more questions, but this will definitely get me started!

---------- Post updated at 03:40 PM ---------- Previous update was at 03:30 PM ----------

What does connect() return? Is there somewhere I can view the possible values?
# 6  
Old 01-20-2011

From the connect(2) man-page:
     Upon successful completion, a value of 0 is returned.  Otherwise, a value of -1 is returned and the global inte-
     ger variable errno is set to indicate the error.

This User Gave Thanks to Scott For This Post:
# 7  
Old 01-20-2011
Yes, and the perror() command I suggested above checks errno to tell what it should print. errno is a global variable that's set by system calls, so when most any system call returns an error, perror can tell you what it is.
This User Gave Thanks to Corona688 For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. AIX

Unable to set ACLs on sulog - need to grant read permission to a normal user on AIX 6.1

Hi, I need to grant read permission to a normal user on sulog file on AIX 6.1. As root I did acledit sulog and aclget shows "extended permissions" as "enabled" and normal user "splunk" has read permissions. When I try to access sulog as splunk user it won't allow and aclget for splunk user... (6 Replies)
Discussion started by: prvnrk
6 Replies

2. Shell Programming and Scripting

AIX : Need to convert UNIX Timestamp to normal timestamp

Hello , I am working on AIX. I have to convert Unix timestamp to normal timestamp. Below is the file. The Unix timestamp will always be preceded by EFFECTIVE_TIME as first field as shown and there could be multiple EFFECTIVE_TIME in the file : 3.txt Contents of... (6 Replies)
Discussion started by: rahul2662
6 Replies

3. Shell Programming and Scripting

Send mail from AIX 7.1

Hi, My OS version is AIX 7.1. I am trying to send an email with a file to my mail address. sendmail or uuencode does not work. Can someone give me the correct format ? I use: uuencode <file name> | mail -s "subject" emailaddress Thanks Use code tags, thanks. (3 Replies)
Discussion started by: Nagesh_1985
3 Replies

4. Shell Programming and Scripting

AIX mail notification

plzzz help me, I want to send emails for exchange group members when the used file-system % gets more than 90%, this notification must include df -g, netstat -i,and errpt with the hostname thx in advance (0 Replies)
Discussion started by: majd_ece
0 Replies

5. Shell Programming and Scripting

Calling SQL script from ksh job and send mail on some error.

Hi, I am trying to call sql script from ksh job with parameters.The parameters passed from ksh job will be used in SELECT query in sql file to SPOOL the data in extract file.My questions are: 1) How to call a sql script from ksh job with parameters? 2) How to use the parameter in sql file to... (1 Reply)
Discussion started by: anil029
1 Replies

6. UNIX for Advanced & Expert Users

Oracle (11gr2) calling unix commands (aix)

I have an Oracle database running on AIX, and I have a procedure that is calling OS commands from an oracle (and it's not working anymore)... so, there was an Java stored proc in Oracle CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED COMMON."Host" as import*; public class Host {... (1 Reply)
Discussion started by: bongo
1 Replies

7. UNIX for Dummies Questions & Answers

Forwarding Mail in AIX 5.3

Hello everyone, I am trying to create a forwarding scenario, and I do not seem to get it right! I created a .forward file in the directory where my personal mailbox resides. In the file is the full address to deliver email to ... yet the emails do not seem to get forwarded. Is there something... (3 Replies)
Discussion started by: gio001
3 Replies

8. AIX

Normal User Unable to Login Through AIX CDE

When we as normal user try to login, the session startup terminates and we are presented with the login screen.The root user is able to login without any problem.I can log in to the Aix server as normal user through telnet & using xmanager but not directly through server terminal .The Aix version... (1 Reply)
Discussion started by: ranadeep
1 Replies

9. AIX

To find RAM Size in AIX as normal user?

Hi, Am jus trying to find the Total RAM Size of a AIX m/c (in MB)..svmon works perfectly for a superuser...But i want to achive this as a normal user...Please help me out with correct command.. Best Regards, Muthukumaran.M (3 Replies)
Discussion started by: muthukumaran13
3 Replies

10. AIX

Calling All Aix Experts

I am new to the world of AIX. I want to get certified in AIX and learn it but fast. with in 3 months Could you give me some advise of a good site that with teach you or a bootcamp that is reasonable. I am really in need I am in atlanta (0 Replies)
Discussion started by: Courtney3216
0 Replies
Login or Register to Ask a Question

Featured Tech Videos