digitalmars.D.learn - MSG_WAITALL for Sockets
- Jeroen Bollen (2/2) Nov 19 2013 Is there a way I can call a receive method on a socket with
- Rob T (16/19) Nov 19 2013 module core.sys.posix.sys.socket;
- Jeroen Bollen (4/24) Nov 20 2013 Thanks! I don't really get how this is working though, isn't the
- Jonathan M Davis (16/49) Nov 20 2013 SocketFlags in std.socket is used incorrectly. It's used as a parameter ...
Is there a way I can call a receive method on a socket with MSG_WAITALL as a flag? There doesn't seem to be an enum for that.
Nov 19 2013
On Tuesday, 19 November 2013 at 18:35:08 UTC, Jeroen Bollen wrote:Is there a way I can call a receive method on a socket with MSG_WAITALL as a flag? There doesn't seem to be an enum for that.module core.sys.posix.sys.socket; enum : uint { MSG_CTRUNC = 0x08, MSG_DONTROUTE = 0x04, MSG_EOR = 0x80, MSG_OOB = 0x01, MSG_PEEK = 0x02, MSG_TRUNC = 0x20, MSG_WAITALL = 0x100 } Use SocketFlags to set the flag. If using Windows, you can set up your own enum, as I don't think one is pre-defined. --rt
Nov 19 2013
On Tuesday, 19 November 2013 at 23:36:57 UTC, Rob T wrote:On Tuesday, 19 November 2013 at 18:35:08 UTC, Jeroen Bollen wrote:Thanks! I don't really get how this is working though, isn't the point of using an enum as a type, preventing any values that's not listed in the enum definition?Is there a way I can call a receive method on a socket with MSG_WAITALL as a flag? There doesn't seem to be an enum for that.module core.sys.posix.sys.socket; enum : uint { MSG_CTRUNC = 0x08, MSG_DONTROUTE = 0x04, MSG_EOR = 0x80, MSG_OOB = 0x01, MSG_PEEK = 0x02, MSG_TRUNC = 0x20, MSG_WAITALL = 0x100 } Use SocketFlags to set the flag. If using Windows, you can set up your own enum, as I don't think one is pre-defined. --rt
Nov 20 2013
On Wednesday, November 20, 2013 17:26:27 Jeroen Bollen wrote:On Tuesday, 19 November 2013 at 23:36:57 UTC, Rob T wrote:SocketFlags in std.socket is used incorrectly. It's used as a parameter type for &ed values rather than just a list of the flags that you can & together, and unfortunately, the language does not currently prevent that. You can do stuff like. enum Foo : string { a = "bar" } auto b = Foo.a; b ~= " stool"; with impunity. It's just that the compiler will prevent something like Foo f = "hello"; So, the type protection on enums is currently quite poor. IMHO, the compiler should prevent an enum from ever having an invalid enum value when no casts are used, but that's just not the way that it is right now. Pretty much all it protects against are direct assignments. And I have no idea whether that will ever be fixed or not. Hopefully it will be though. - Jonathan M DavisOn Tuesday, 19 November 2013 at 18:35:08 UTC, Jeroen Bollen wrote:Thanks! I don't really get how this is working though, isn't the point of using an enum as a type, preventing any values that's not listed in the enum definition?Is there a way I can call a receive method on a socket with MSG_WAITALL as a flag? There doesn't seem to be an enum for that.module core.sys.posix.sys.socket; enum : uint { MSG_CTRUNC = 0x08, MSG_DONTROUTE = 0x04, MSG_EOR = 0x80, MSG_OOB = 0x01, MSG_PEEK = 0x02, MSG_TRUNC = 0x20, MSG_WAITALL = 0x100 } Use SocketFlags to set the flag. If using Windows, you can set up your own enum, as I don't think one is pre-defined. --rt
Nov 20 2013