Informix Error -44
-44 Socket type not supported.
An operating-system error code with the meaning shown was unexpectedly returned to the database server. If the error recurs, note all circumstances and contact IBM Informix Technical Support.
Oninit® Troubleshooting Guidance
This is an operating-system error number, not an Informix diagnosis.
The same errno is returned by many different operations, so on its own it says what the operating system refused, not what Informix was trying to do. Informix will usually have reported a more specific error alongside it — in the message log, in the SQL or ISAM error pair, or in the accompanying assert failure — and that error normally defines the real cause far more precisely than the errno does. Find it before diagnosing from this number alone.
This matters less than it used to. Later versions of the engine trap many of these conditions and report them as specific Informix errors naming the operation, the object and the context, so a bare errno in this range is increasingly a sign of an older version, an unusual code path, or a failure early in startup before the better reporting is available. If you are seeing one on a current version, the more specific error is worth looking for even harder.
Important platform note. Error codes in this range represent operating-system
errnovalues whose meanings vary between Unix platforms and versions. Confirm the nativeerrnodefinition on the server where the Informix error occurred before diagnosing the problem from the number alone.
Determine the Native Error Meaning
| Value | Symbol | |
|---|---|---|
| Catalogue text — Socket type not supported | 44 | ESOCKTNOSUPPORT on BSD |
| The same condition on Linux | 94 | ESOCKTNOSUPPORT |
| Errno 44 on Linux | 44 | ECHRNG — Channel number out of range, STREAMS-era |
Codes -42 to -55 are the BSD socket block and each sits 50 higher on Linux.
python3 -c 'import os; print(44, os.strerror(44)); print(94, os.strerror(94))'
What ESOCKTNOSUPPORT Actually Tells You
The socket type — SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, SOCK_SEQPACKET — is not supported for the family and protocol requested.
It is the rarest of the four creation-time refusals, because the common combinations are universally supported. A stream socket over TCP works everywhere; you have to ask for something unusual to be refused.
| Error | Symbol | What was refused |
|---|---|---|
| -43 | EPROTONOSUPPORT |
The protocol |
| -44 | ESOCKTNOSUPPORT |
The socket type |
| -46 | EPFNOSUPPORT |
The protocol family |
| -47 | EAFNOSUPPORT |
The address family |
All four are decided at socket(), and stacks report them somewhat interchangeably. Which of the four you receive says more about the implementation than about the mistake.
What This Means in Informix
The engine's normal connection handling will not produce this. Informix's network protocols use ordinary stream sockets, which every supported platform provides.
A -44 therefore points at something around the instance rather than at it:
- Custom code opening its own socket — a C UDR, a wrapper, a monitoring agent — asking for a type the platform will not give it.
SOCK_RAWis the usual candidate, and it also requires privilege, so the failure may present as -1 instead depending on which check runs first. - A client library or driver built for a different socket set.
- A restricted environment where a socket type is filtered rather than absent. In a container that is more likely to appear as
EPERM(-1) orENOSYS(-38), so the errno tells you which layer refused. - A
sqlhostsprotocol entry whose implementation needs a type the platform lacks — more usually reported as -43.
Where a -44 appears with no custom code anywhere in the path, treat the value with the suspicion -33 describes: nothing in a normal connection path can produce it, so it may be residue rather than evidence.
Common Causes
- Custom code requesting an unusual socket type, most often
SOCK_RAW. - A socket type filtered by a container or security policy rather than absent.
- A client library built against a different platform's socket set.
- A stale
errno, where nothing in the failing path could have produced this value.
Diagnostic Checks
Confirm the symbol, since errno 44 on Linux is a STREAMS value and unrelated:
python3 -c 'import os; print(44, os.strerror(44)); print(94, os.strerror(94))'
Trace the call. The socket type is named directly in the traced line, and nothing else will identify it:
strace -f -e trace=socket -p <pid> 2>&1 | grep -iE 'ESOCKTNOSUPPORT|EPROTONOSUPPORT|EPERM'
socket(AF_INET, SOCK_RAW, IPPROTO_ICMP) = -1 EPERM (Operation not permitted)
Note that a raw socket is frequently refused on privilege before it is refused on type, so a trace may show -1 where the code expected this error.
Check whether the environment is restricted:
grep -i seccomp /proc/<pid>/status
capsh --print 2>/dev/null | grep -i net_raw
cat /proc/1/cgroup
CAP_NET_RAW absent explains a refused raw socket without any question of platform support.
Identify the code making the call:
onstat -g dll
ps -ef | grep -E 'oninit|onbar|agent' | grep -v grep
And the engine's record:
tail -300 "$INFORMIXDIR/tmp/online.log"
Solutions / Resolution
- Trace the call and read the type. Everything else depends on knowing which type was requested, and the traced line gives it in full.
- Establish whether it is unsupported or unprivileged. A raw socket refused for lack of
CAP_NET_RAWis -1, not this, and the remedies have nothing in common. - Question why the code wants that type. A database-adjacent process needing a raw socket is unusual and worth understanding before it is granted the capability to use one.
- Do not grant
CAP_NET_RAWto clear an error. It is a broad privilege, and giving it to a process running alongside a database instance deserves a decision rather than a workaround. - If no custom code is in the path, treat the number as residue — see -33. Nothing in the engine's normal connection handling can produce this, so the value most likely came from somewhere else.
- In a container, check the namespace's capabilities rather than the host's.
Platform Note
| Platform | This condition | Errno 44 there means |
|---|---|---|
| Linux | errno 94 | ECHRNG — STREAMS-era, unrelated |
| Solaris, AIX, HP-UX | confirm on the host | confirm on the host |
| BSD, Darwin | errno 44 | this condition |
| Task | Linux | Solaris | AIX |
|---|---|---|---|
Trace socket() |
strace -e socket |
truss -t so_socket |
truss -t socket |
| Capabilities | capsh --print |
privileges: ppriv -S <pid> |
role-based, lsrole |
Solaris expresses the equivalent of CAP_NET_RAW through privileges (net_rawaccess), inspected with ppriv. The concept transfers; the tooling does not.
Related Errors / Related Topics
- -43 — Protocol not supported. The neighbouring refusal, and the more likely of the two to arise from an Informix configuration. Note that on Linux errno 43 is
EIDRMand means something considerably more serious. - -46 and -47 — the family refusals, decided at the same moment.
- -45 — Operation not supported on socket, where the socket was created successfully and an operation on it was refused.
A -44 with no custom code in the path is more likely to be a misreported value than a socket problem. Trace first; if nothing requested an unusual socket type, the number is not the evidence it appears to be.